Unity Rigidbody Bileşeni ve Fizik

ücretsiz unity eğitim serisi

unity rigidbody bileşeniBir nesnenin pozisyonunun fizik simülasyonu ile kontrolü Rigidbody bileşeni ile yapılır. Bir nesneye bir Rigidbody bileşeni eklemek, o nesnenin hareketini Unity’nin fizik motorunun kontrolü altına alacaktır. Herhangi bir kod eklemeden bile, bir Rigidbody nesnesi yer çekimi tarafından aşağıya doğru çekilecek (gravity işaretliyse) ve doğru çarpıştırıcı bileşeni (colliders) de mevcutsa gelen nesnelerle çarpışmalara tepki verecektir.

Rigidbody ayrıca nesneye kuvvet uygulamanızı ve fiziksel olarak gerçekçi bir şekilde kontrol etmenizi sağlayan bir komut dosyası API’sine sahiptir. Örneğin, bir otomobilin davranışı, tekerlekler tarafından uygulanan kuvvetler cinsinden belirtilebilir. Bu bilgi verildiğinde, fizik motoru otomobilin hareketinin diğer birçok yönünü ele alabilir, böylece gerçekçi bir şekilde hızlanır ve çarpışmalara doğru tepki verir.

Bir komut dosyasında, Kuvvetlerin uygulanacağı ve Rigidbody bileşeninin ayarlarının değiştirileceği yer olarak FixedUpdate işlevi önerilir (diğer çoğu çerçeve güncelleme görevi için kullanılan Update aksine). Bunun nedeni, fizik güncellemelerinin, çerçeve güncellemesine uymayan ölçülü zaman adımlarında gerçekleştirilmesidir. FixedUpdate, her fizik güncellemesinden hemen önce çağrılır ve böylece yapılan değişiklikler doğrudan işlenir.

Şimdi bu bileşeninin kullanacağımız bir örnek yapacağız.

Rigidbody AddForce Fonksiyonu İle Topa Kuvvet Uygulamak

unity top kontrolü

Player.cs

using UnityEngine;

[RequireComponent(typeof(Rigidbody))] // Script bir objeye eklendiğinde otomatik olarak Rigidbody componenti eklenir.
public class Player : MonoBehaviour
{
    [SerializeField]
    private float itmeKuvveti = 100.0f;
    private Rigidbody rb;

    float horizontal, vertical;

    void Start()
    {
        rb = GetComponent<Rigidbody>(); // bileşenin referansının alınması
    }

    private void FixedUpdate()
    {
        //yatay ve dikey input değerlerinin alınması
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        //Topu yatay olarak hareket ettirmek için bir vector3 oluşturduk.
        Vector3 movement = new Vector3(horizontal, 0, vertical);

        //Vectorümüz ve itme kuvveti ile kuvvet uyguladık.
        rb.AddForce(movement * itmeKuvveti);
    }
}

 CameraFollow.cs

using UnityEngine;

public class FollowCamera : MonoBehaviour
{
    [SerializeField]
    GameObject player;

    private Vector3 offset;

    void Start()
    {
        // kamera ile player arasındaki mesafenin ölçülmesi
        offset = transform.position - player.transform.position; 
    }

    void LateUpdate()
    {
        // kamera ile player arasındaki mesafenin korunması
        transform.position = player.transform.position + offset; 
    }

}

Diğer AddForce’a benzer diğer fonksiyonları incelemek için buraya tıklayabilirsiniz.

Rigidbody Yer Çekimi Size Sorun Yaratmasın!

Use gravity’yi işaretlediğinizde yer çekimini aktif hale getirmiş olursunuz. Yaygın bir sorun, oyun fiziğinin “yavaş çekimde” göründüğüdür. Bu aslında modelleriniz için kullanılan ölçeğe bağlıdır. Varsayılan yerçekimi ayarları, bir dünya biriminin bir metre mesafeye karşılık geldiğini varsayar. Fiziksel olmayan oyunlarda, modellerinizin tamamı 100 birim uzunluğundaysa çok fazla bir fark yaratmaz, ancak fizik kullanırken çok büyük nesneler olarak kabul edilir. Küçük olması gereken nesneler için büyük bir ölçek kullanılırsa, çok yavaş düşecek gibi görünecektir – fizik motoru çok büyük mesafelere düşen çok büyük nesneler olduğunu düşünmektedir. Bunu göz önünde bulundurarak, nesnelerinizi gerçek hayatta ölçeğinde az ya da çok tuttuğunuzdan emin olun (böylece bir araba yaklaşık 4 birim = 4 metre olmalıdır).

Diğer yazılarda görüşmek dileğiyle..