Unity'de nasıl kapı yapabilirim?

DeltaDeveloper

Decapat
Katılım
13 Nisan 2022
Mesajlar
180
Çözümler
1
Daha fazla  
Sistem Özellikleri
Windows 11 Home Single Language 22H2, İntelCore İ3
Cinsiyet
Erkek
Unity'de sol tık ile açılabilen ve kapanabilen bir kapı yapmaya çalışıyorum. Bunu nasıl yapabilirim?
 
Sadece kapı bir kısım dönecek o kadar.
İlk önce bir kapı modeli bul veya küpü kapı gibi yap yada sadece küp kullan.

Küpün ismini door yap.

Sonra bir C# dosyası oluştur.


Kod:
public Gameobject door;

void Update()
{
  if(Input.GetMouseDown(0))
  {
    door.tranform.rotation = Quaternion.Euler(new Vector3(0,10,0));
  }
}

C# dosyasını bir boş objeye at ve door objesini de, boş objede ki c# betiğinin içine at.

RayCast ile sadece kapıya dokunarak ta yapılır ama şimdilik anlaşılsın diye yaptım.
 
Sadece kapı bir kısım dönecek o kadar.
İlk önce bir kapı modeli bul veya küpü kapı gibi yap ya da sadece küp kullan.

Küpün ismini door yap.

Sonra bir C# dosyası oluştur.

Kod:
public Gameobject door;

void Update()
{
 if(Input.GetMouseDown(0))
 {
 door.tranform.rotation = Quaternion.Euler(new Vector3(0,10,0));
 }
}

C# dosyasını bir boş objeye at ve door objesini de, boş objede ki C# betiğinin içine at.

RayCast ile sadece kapıya dokunarak ta yapılır ama şimdilik anlaşılsın diye yaptım.

Animasyonlu nasıl yapabilirim? Şu an bende açma ve kapama animasyonları var.
 
Unity'de sol tık ile açılabilen ve kapanabilen bir kapı yapmaya çalışıyorum. Bunu nasıl yapabilirim?
Kapıya animasyonu ekleyip çalışma koşulu ekleyeceksin (bool yada trigger) sonra kod üzerinden playerin kapıya yaklaşıp yaklaşmadığını kontrol edeceksin raycast veya collider ile, belli yakınlıktaysa ve mouseye basarsa animasyon koşulunu tetikleyeceksin bu kadar basit.

Örnek olarak collıder kullanarak bir script

Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Door : MonoBehaviour
{
    private Animator anim;

    private bool kapiAcikmi = false;

    private void Start()
    {
        anim = GetComponent<Animator>();
    }

    private void OnTriggerStay(Collider other)
    {
        if (other.gameObject.tag =="Player" && Input.GetMouseButtonDown(0))
        {
            if (kapiAcikmi) kapiAcikmi = false;
            else kapiAcikmi = true;
            anim.SetBool("Door", kapiAcikmi);

        }
    }
}
Bu kodun çalışması için animator de Door diye bir bool oluşturman lazım ve bool false ise kapı kapama animasyonunu true ise kapı açma animasyonunu çalıştıracak şekilde ayarlamalısın.
Ayrıca kapıda trigger seçili collider olması ve karakterinde Player tagi olması gerek.
 
Kapıya animasyonu ekleyip çalışma koşulu ekleyeceksin (bool ya da trigger) sonra kod üzerinden Player'in kapıya yaklaşıp yaklaşmadığını kontrol edeceksin raycast veya collider ile, belli yakınlıktaysa ve fareye basarsa animasyon koşulunu tetikleyeceksin bu kadar basit.

Örnek olarak collıder kullanarak bir script.

Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Door : MonoBehaviour.
{
 private Animator anim;

 private bool kapiAcikmi = false;

 private void Start()
 {
 anim = GetComponent<Animator>();
 }

 private void OnTriggerStay(Collider other)
 {
 if (other.gameObject.tag =="Player" && Input.GetMouseButtonDown(0))
 {
 if (kapiAcikmi) kapiAcikmi = false;
 else kapiAcikmi = true;
 anim.SetBool("Door", kapiAcikmi);

 }
 }
}
Bu kodun çalışması için animator de door diye bir bool oluşturman lazım ve bool false ise kapı kapama animasyonunu true ise kapı açma animasyonunu çalıştıracak şekilde ayarlamalısın.
Ayrıca kapıda trigger seçili collider olması ve karakterinde Player tagi olması gerek.

Hocam kod çalışmadı. Şu kodu kullandım:

C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DoorOpen : MonoBehaviour.
{
 private Animator anim;

 private bool isOpen = false;

 private void Start()
 {
 anim = GetComponent<Animator>();
 }

 private void OnTriggerStay(Collider other)
 {
 if (other.gameObject.tag =="Player" && Input.GetMouseButtonDown(0))
 {
 if (isOpen) isOpen = false;
 else isOpen = true;
 anim.SetBool("trigger_", isOpen);

 }
 }
}

Output kısmında hiçbir mesaj gelmiyor. Sizin dediğiniz gibi şunları animator kısmına ekledim:

1678864069619.png
 
Hocam kod çalışmadı. Şu kodu kullandım:

C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DoorOpen : MonoBehaviour.
{
 private Animator anim;

 private bool isOpen = false;

 private void Start()
 {
 anim = GetComponent<Animator>();
 }

 private void OnTriggerStay(Collider other)
 {
 if (other.gameObject.tag =="Player" && Input.GetMouseButtonDown(0))
 {
 if (isOpen) isOpen = false;
 else isOpen = true;
 anim.SetBool("trigger_", isOpen);

 }
 }
}

Output kısmında hiçbir mesaj gelmiyor. Sizin dediğiniz gibi şunları animator kısmına ekledim:

Eki Görüntüle 1701913
Kapı nesnesinin collider'i, oyuncu nesnesinin collider'ini kapsamalı ve en az birisinde Rigidbody componenti bulunmalıdır.

ONTriggerStay metodu kullanıyorsan, ikisinde de isTrigger özelliği açık olmalıdır.
 
Hocam kod çalışmadı. Şu kodu kullandım:

C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DoorOpen : MonoBehaviour.
{
 private Animator anim;

 private bool isOpen = false;

 private void Start()
 {
 anim = GetComponent<Animator>();
 }

 private void OnTriggerStay(Collider other)
 {
 if (other.gameObject.tag =="Player" && Input.GetMouseButtonDown(0))
 {
 if (isOpen) isOpen = false;
 else isOpen = true;
 anim.SetBool("trigger_", isOpen);

 }
 }
}

Output kısmında hiçbir mesaj gelmiyor. Sizin dediğiniz gibi şunları animator kısmına ekledim:

Eki Görüntüle 1701913
Trigger değere bool atamaya çalışıyorsun o yüzden çalışmaz. isOpen diye bool açmışsın onu kullan yani
anim.SetBool("trigger_", isOpen);
yerine
anim.SetBool("isOpen", isOpen);
yaz.

Ayrıca animatorlere parametre eklemişsin ama onu kullanmamışsın. DoorOpen ve DoorClose animasyonları arasında sağ tıklayıp transation ekle biri açılıştan kapanışa diğeri kapanıştan açılışa. Sonra açılışa giden transation'a true değeri ver diğerine false.

Ekstra olarakta objelere collider, rigidbody , tag eklemen lazım çalışması için. İki objede de trigger açık olmasına gerek yok herhangi bir objenin açık olsa yeter.
Ama bunlar çok temel şeyler kapıyı başarsan bile başka bir şey eklerken çok zorlanırsın.

Bence kendi başına yapmayı denemek yerine tutorial videoları izleyerek temelini sağlamlaştır sonra bu tarz eylemleri 1 dakika içinde basitce yapabilecek seviyeye gelirsin.
 

Yeni konular

Geri
Yukarı