Rigidbody.AddForce

Deklarasyon

public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);

Parametreler

force Dünya koordinatlarında etkili olan kuvvet vektörü.

mode Uygulanacak kuvvetin türü.

Açıklama

Rigidbody'ye bir kuvvet ekler.

Kuvvet, sürekli olarak kuvvet vektörünün yönünde uygulanır. ForceMode modunu belirtmek, kuvvetin Türü'nü Acceleration (Hızlanma), Impulse (İtme) veya Velocity Change (Hız Değişimi) olarak değiştirmek için kullanılabilir.

Bu işlevle uygulanan kuvvetlerin etkisi, işlevin çağrıldığı anda birikir. Fizik sistemi, etkileri bir sonraki simülasyon çalışmasında uygular (ya FixedUpdate'den sonra ya da kod açıkça Physics.Simulate metodunu çağırırsa). Bu işlevin farklı modları olduğu için, fizik sistemi yalnızca sonuçta oluşan hız değişikliğini birikim yapar, geçilen kuvvet değerlerini biriktirmez. Diyelim ki deltaTime (DT), simülasyon adım uzunluğuna (Time.fixedDeltaTime) eşit ve kuvvetin uygulandığı Rigidbody'nin kütlesi ise cismin kütlesine eşit, işte hız değişikliğinin tüm modlar için nasıl hesaplandığı:

  • ForceMode.Force: Girişi kuvvet (Newton cinsinden ölçülen) olarak yorumlar ve hızı kuvvet * DT / kütlesi değeri kadar değiştirir. Etki, simülasyon adım uzunluğuna ve cismin kütlesine bağlıdır.
  • ForceMode.Acceleration: Parametreyi ivme (metre/saniye kare olarak ölçülen) olarak yorumlar ve hızı kuvvet * DT değeri kadar değiştirir. Etki, simülasyon adım uzunluğuna bağlıdır, ancak cismin kütlesine bağlı değildir.
  • ForceMode.Impulse: Parametreyi bir impuls (saniyede Newton cinsinden ölçülen) olarak yorumlar ve hızı kuvvet / kütlesi değeri kadar değiştirir. Etki, cismin kütlesine bağlıdır, ancak simülasyon adım uzunluğuna bağlı değildir.
  • ForceMode.VelocityChange: Parametreyi doğrudan bir hız değişikliği (metre/saniye olarak ölçülen) olarak yorumlar ve hızı kuvvet değeri kadar değiştirir. Etki, cismin kütlesine veya simülasyon adım uzunluğuna bağlı değildir.

Kuvvet yalnızca etkin bir Rigidbody'ye uygulanabilir. Eğer bir GameObject etkin değilse, AddForce etkisi olmaz. Ayrıca, Rigidbody kinematik olamaz.

Varsayılan olarak, Rigidbody'nin durumu, bir kuvvet uygulandığında awake (uyanık) olarak ayarlanır, ancak kuvvet Vector3.zero ise awake (uyanık) olmaz.

Ayrıca bakınız: AddForceAtPosition, AddRelativeForce, AddTorque.

Bu örnek, GameObject'in Rigidbody'sine ileriye doğru bir kuvvet uygular.

using UnityEngine;

public class Example : MonoBehaviour
{
    Rigidbody m_Rigidbody;
    public float m_Thrust = 20f;

    void Start()
    {
        //Bu komut dosyasının bağlı olduğu GameObject'ten Rigidbody'yi al.
        m_Rigidbody = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        if (Input.GetButton("Jump"))
        {
            //Bu Rigidbody'e, bu GameObject'in yukarı ekseni yönünde bir kuvvet uygula.
            m_Rigidbody.AddForce(transform.up * m_Thrust);
        }
    }
}



Deklarasyon

public void AddForce(float x, float y, float z, ForceMode mode = ForceMode.Force);

Parametreler

x         Dünya x-ekseni boyunca uygulanacak kuvvetin büyüklüğü.

y         Dünya y-ekseni boyunca uygulanacak kuvvetin büyüklüğü.

z         Dünya z-ekseni boyunca uygulanacak kuvvetin büyüklüğü.

mode Uygulanacak kuvvetin türü.

Açıklama

Rigidbody'ye bir kuvvet ekler.

Bu örnek, GameObject'in Rigidbody'sine Z ekseni boyunca bir Impulse kuvvet uygular.

using UnityEngine;

public class Example : MonoBehaviour
{
    public float thrust = 1.0f;
    public Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        rb.AddForce(0, 0, thrust, ForceMode.Impulse);
    }
}


Bu blog Unity Docs'un Türkçeye çevrilmiş halidir.

Yorumlar

Bu blogdaki popüler yayınlar

Important Classes - Vectors

RequireComponent

Important Classes - GameObject