Menu
CoddyTech

Oyuncuyu Takip Et

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

Oyuncuyu kovalayan bir düşmanın Rigidbody bileşenine ihtiyacı vardır; böylece duvarlar onu durdurur, o da itebilir ve itilebilir. Kovalamaca, her fizik adımında bir kez ayarlanan ve oyuncuyu hedef alan bir hızdan ibarettir. Bu zombi, player yuvasında ne varsa ona doğru yürür:

[SerializeField] private Transform player;
[SerializeField] private float speed = 2.5f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    Vector3 toPlayer = player.position - rb.position;
    toPlayer.y = 0f;
    Vector3 dir = toPlayer.normalized;
    rb.linearVelocity = new Vector3(dir.x * speed, rb.linearVelocity.y, dir.z * speed);
}

player.position - rb.position zombiden oyuncuya doğru yönü gösterir. Oyuncu daha yüksekte veya alçakta durduğunda zombinin düz bir zeminde yürümesi için y değeri 0 olarak ayarlanır ve normalized vektörün uzunluğunu 1 yapar; böylece oyuncu ister 2 ister 20 birim uzakta olsun zombi speed hızında yürür. Yeni hız, eski y hızını korur; böylece yer çekimi zombiyi bir basamaktan aşağı çekmeye devam eder. Rigidbody bileşeninde Freeze Rotation açık olduğundan, zombi yürürken devrilmez.

Ayarladığınız hız, anında harekete başlayan ve dönen bir yürüteç oluşturur. Yuvarlanan varil gibi ağır bir düşmanı itmek içinse aynı FixedUpdate içinde AddForce kullanılır: düşman hız kazanır, momentumunu korur ve oyuncu yana çekildiğinde hedefini aşar.

Vector3 toPlayer = player.position - rb.position;
toPlayer.y = 0f;
rb.AddForce(toPlayer.normalized * push);

Kovalayan bir düşmanı Transform'uyla hareket ettirmekten kaçının: bu, onu başka herhangi bir yere koyabileceğiniz gibi kolayca bir duvarın içine yerleştirir ve fizik motoru ancak sonrasında onu dışarı itebilir.

challenge icon

Görev

Orta

Kayanın oyuncunun peşinden yuvarlanmasını sağla.

  1. FixedUpdate() içinde Vector3 toPlayer = player.position - rb.position; ve toPlayer.y = 0f; değerlerini ayarla; böylece itme kuvveti zemine paralel kalır.
  2. rb.AddForce(toPlayer.normalized * force); çağrısını yap; yakınken de uzakken de aynı itme uygulanır. Dönüşünü serbest bırak, böylece sürtünme kayayı yuvarlar.

“Oyna” düğmesine bas ve kayanın etrafında daireler çizerek koş. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class Boulder : MonoBehaviour
{
    [SerializeField] private Transform player;
    [SerializeField] private float force = 6f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // kayayı zemin boyunca oyuncuya doğru it
    }
}

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

Kendi başına pratik yap: Unity playground