Menu
CoddyTech

OnCollisionEnter

Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 8 / 71.

İki çarpıştırıcı birbirine dokunmaya başladığında Unity, her iki nesnenin de betiklerinde OnCollisionEnter(Collision collision) metodunu çağırır. Bu metot, temasın başladığı fizik adımında bir kez çağrılır; nesneler temas hâlinde kaldığı sürece tekrar çağrılmaz. Bir çarpışmanın gerçekleşmesi için iki nesneden en az birinde fiziğin hareket ettirdiği bir Rigidbody bulunmalıdır: Rigidbody bileşeni olmayan bir duvar ve zemin birbirlerine hiçbir bildirim göndermez.

Bu sandık yere indiğinde bir kayıt oluşturur. Bir Rigidbody bileşeni olduğu için düşer ve mesaj, zemine çarptığı fizik adımında gelir:

void OnCollisionEnter(Collision collision)
{
    Debug.Log("Thud!");
}

Sandık bir kez kayıt oluşturur; bunu ancak zeminden ayrılıp ikinci kez indiğinde tekrar yapar. Zemin de mesajı alır: Üzerindeki bir betik, zeminde Rigidbody bileşeni olmasa bile sandığın inişini algılar. Metodun adı ve parametresi tam olarak doğru olmalıdır. onCollisionEnter adlı bir metot, herhangi bir hata vermeden hiçbir zaman çağrılmaz. Collider parametresi alan bir metot için Unity Script error: OnCollisionEnter hatasını ve This message parameter has to be of type: Collision mesajını kaydeder ve metodu yok sayar. İki nesne temas hâlinde kaldığı sürece Unity her fizik adımında OnCollisionStay metodunu çağırır; nesneler ayrıldığında ise OnCollisionExit metodunu bir kez çağırır.

challenge icon

Görev

Kolay

Basınç plakası üzerine neyin düştüğünü sayar.

  1. PressurePlate sınıfına private int presses; alanını ekle.
  2. void OnCollisionEnter(Collision collision) ekle: presses değerini 1 artır ve "Pressed " + presses ifadesini günlüğe kaydet.

“Oyna” düğmesine bas: sandık düşer ve Konsol'da bir kez Pressed 1 görünür. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class PressurePlate : MonoBehaviour
{
    // Her inişi say ve kayda geçir: Pressed 1, Pressed 2, ...
}

Fizik ve Oynanış bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground