Bir geliştiricinin not defteri

23 Ocak 2016 Cumartesi

Unity-Çarpışma Algılamak

5 yorum
Unity de bir objenin diğer objeye çarpmasını anlamak için Collision veya Trigger kullanılır.Bu ikisinin temel farkı Triggerde objemizin objelerin içinden geçebilmesidir.

  • Collision

Collisionun çalışması için Colider componentinin ve rigidbody  ekli olması gerekir.3 tür fonksionu vardır.

             OnCollisionEnter
OnCollisionEnter bir objenin çarpma durumunda 1 kere çalışır.

void OnCollisionEnter(Collision col) {
 //her hangi bir objeye çarptığında çalışır
 if (col.gameObject.tag == "Cupe") {
 //tagı Cupe olan bir objeye çarptığında çalışır
 }
 if (col.gameObject.name == "Cupe") {
 //ismi Cupe olan bir objeye çarptığında çalışır
 }
 }

            OnCollisionStay
OnCollisionStay bir objenin çarpma durumu sürdüğü sürece çalışır.

void OnCollisionStay(Collision col) {
 //her hangi bir  objeye çarptığında çalışır
 if (col.gameObject.tag == "Cupe") {
 //tagı Cupe olan bir nesneye çarptığında çalışır
 }
 if (col.gameObject.name == "Cupe"){
  //ismi Cupe olan bir objeye çarptığında çalışır
 }
 }
            OnCollisionExit
OnCollisionExit bir objenin çarpma durumu bittiğinde 1 kere çalışır.

void OnCollisionExit(Collision col) {
 //her hangi bir objeye çarpmayı bıraktığında çalışır
 if (col.gameObject.tag == "Cupe") {
 //tagı Cupe olan bir objeye çarpmayı bıraktığında çalışır
 }
 if (col.gameObject.name == "Cupe")  {
 //ismi Cupe olan bir objeye çarpmayı bıraktığında çalışır
 }
 }


  • Trigger

Trigger çalışması için Colider componentinin ve rigidbody  ekli olması gerekir.Ayrıca Colider componentinin içindeki Is triggerin işaretli olması gerekir .3 tür fonksionu vardır.

             OnCollisionEnter
OnTriggerEnter bir objenin çarpma durumunda 1 kere çalışır.

 void OnTriggerEnter(Collider col)
    {
        //herhangi bir objeye çarptığında çalışır

        if (col.gameObject.tag == "Cupe")
        {
          //tagı Cupe olan bir objeye çarptığında çalışır
        }
        if (col.gameObject.name == "Cupe")
        {
            //ismi Cupe olan bir objeye çarptığında çalışır
        }
    }

            OnCollisionStay
OnTriggerStay bir objenin çarpma durumu sürdüğü sürece çalışır.

void OnTriggerStay(Collider col) {
 //her hangi bir objeye çarptığında çalışır
 if (col.gameObject.tag == "Cupe") {
 //tagı Cupe olan bir objeye çarptığında çalışır
 }
 if (col.gameObject.name == "Cupe") {
 //ismi Cupe olan bir objeye çarptığında çalışır
 }
 }
            OnCollisionExit
OnTriggerExit bir objenin çarpma durumu bittiğinde 1 kere çalışır.

void OnTriggerExit(Collider col) {
 //her hangi bir objeye çarpmayı bıraktığında çalışır
 if (col.gameObject.tag == "Cupe") {
 //tagı Cupe olan bir objeye çarpmayı bıraktığında çalışır
 }
 if (col.gameObject.name == "Cupe") {
 //ismi Cupe olan bir objeye çarpmayı bıraktığında çalışır
 }
 }

5 yorum :

  1. Abi Allah razı olsun bir sorunu çözemiyodum sayende oldu çok teşekkür ederim.

    YanıtlaSil
  2. peki bi objenin 1 kere çarptıktan sonra belirli bir süre çalıştırmak için ne yapmam lazım mesela çarptı çarpmayı bıraksa bile 5 saniye boyunca sürdürmek istiyorum

    YanıtlaSil
    Yanıtlar
    1. Çalıştırmak istediğin kodları bir bool değişkeni ile if içinde update içine yaz.Obje çarptığı zaman boolu true yap.Invoke ile 5 saniye sonra false yap.Böylelikle çarptıktan sonra 5 saniye boyunca kod çalışır.

      Sil
  3. Merhaba oyunumda sepetin duvarların içinden gecmemesini istiyorum box colider ve rigidbody ekledim ama yinede geçiyor illaki kodmu yazmam gerekiyor cevaplarsanız sevinirim

    YanıtlaSil
    Yanıtlar
    1. sepete ve duvarlara colider verdiğinizden emin misiniz gerçi 1 yıl olmuş bi çözüm bulmuşsunuzdur ama nyse..

      Sil