public Gameobject door;
void Update()
{
if(Input.GetMouseDown(0))
{
door.tranform.rotation = Quaternion.Euler(new Vector3(0,10,0));
}
}
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.
Onda yetersizim ya. Animator eklentisi var ama genelde basit animasyonları kodla oluşturuyorum.Animasyonlu nasıl yapabilirim? Şu an bende açma ve kapama animasyonları var.
Onda yetersizim ya. Animator eklentisi var ama genelde basit animasyonları kodla oluşturuyorum.
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.Unity'de sol tık ile açılabilen ve kapanabilen bir kapı yapmaya çalışıyorum. Bunu nasıl yapabilirim?
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);
}
}
}
time.DeltaTime değeri ile bu smootluk verilebilir.Kapıyı aniden değil de smooth şekilde açmanın bir yolu var mı peki animasyonsuz?
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.
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.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); } } }
Ayrıca kapıda trigger seçili collider olması ve karakterinde Player tagi olması gerek.
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);
}
}
}
Kapı nesnesinin collider'i, oyuncu nesnesinin collider'ini kapsamalı ve en az birisinde Rigidbody componenti bulunmalı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 yaniHocam 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
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.