Rigidbody, physics layer'lar ve raycast nasıl çalışır? FixedUpdate neden önemlidir?

Cevap

Rigidbody, bir nesneyi fizik motorunun (PhysX) kontrolüne verir: yerçekimi, kuvvet, çarpışma tepkisi. Fizik sabit zaman adımında (varsayılan 0.02 sn) hesaplanır; bu yüzden fizik kodu FixedUpdate içinde yazılır.

Rigidbody rb;
Vector3 input;

void Awake()  => rb = GetComponent<Rigidbody>();
void Update() => input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); // input'u Update'te oku
void FixedUpdate() => rb.AddForce(input * 10f);  // fiziği FixedUpdate'te uygula
  • Rigidbody'li nesneyi transform.position ile taşımak fiziği bozar; rb.MovePosition veya kuvvet/hız kullanılır.
  • Kinematic Rigidbody fizikten etkilenmez ama diğer nesneleri iter (hareketli platform).
  • Görsel titremeyi önlemek için Rigidbody'de Interpolate açılır.

Layer'lar ve collision matrix

Her GameObject bir layer'a sahiptir. Project Settings > Physics'teki Layer Collision Matrix ile hangi layer'ların birbiriyle çarpışacağı belirlenir (ör. oyuncu mermileri oyuncuya çarpmasın). Bu hem mantık hem performans kazancı sağlar.

Raycast

Bir noktadan belirli yönde ışın gönderip ilk çarptığı collider'ı bulur. Görüş hattı, ateş etme, yere değme kontrolü için kullanılır.

int mask = LayerMask.GetMask("Ground", "Enemy");

if (Physics.Raycast(transform.position, Vector3.down, out RaycastHit hit, 1.1f, mask))
{
    isGrounded = true;
    Debug.Log(hit.collider.name + " " + hit.distance);
}

LayerMask bir bit maskesidir; raycast'i sadece ilgili layer'larla sınırlamak hem yanlış sonuçları hem maliyeti azaltır. Birden fazla sonuç için RaycastNonAlloc tercih edilir.

  1. Unity'de Update, FixedUpdate ve LateUpdate arasındaki fark nedir?KolayUnity & C#Game Dev
  2. GetComponent çağrılarını neden önbelleğe almalısınız?KolayUnity & C#Game Dev
  3. C# delegate, event ve UnityEvent arasındaki farklar nelerdir?OrtaUnity & C#Game Dev
  4. Unity'de garbage collection neden frame düşüşüne yol açar? Update içinde allocation'dan nasıl kaçınırsınız?ZorUnity & C#Game Dev
  5. C#'ta struct ile class arasındaki fark nedir? Value type ve reference type oyunda neden önemlidir?OrtaUnity & C#Game Dev
  6. Prefab nedir? Prefab variant ve nested prefab ne işe yarar?KolayUnity & C#Game Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle