Menu
CoddyTech

Arena

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

Bu bölümde Arena Escape oyunu oluşturuluyor. Duvarlarla çevrili bir arenada avcılardan kaçarken dalgalar hâlinde üzerinize gelirler; üç darbe oyunu bitirir ve son dalga da çıktığında bir çıkış açılır. Oyun, projenin başından beri projede bulunan beş betikten oluşur: Player, Hunter, Spawner, Health ve Exit. Son dört betik şimdilik boştur ve her ders bunlardan birini doldurur.

Oyuncu, kendi ayarladığı bir hız yerine kuvvetlerle hareket eder; böylece bir avcının geri tepme kuvveti, hareketini sıfırlamak yerine hareketine eklenir. Tek başına bir itiş oyuncunun sonsuza dek hızlanmasına neden olurdu; bu yüzden linearDamping, her adımda hızının bir kısmını azaltır: sabit bir itiş, ivmenin sönümlemeye bölünmesiyle bulunan yaklaşık bir azami hızda dengelenir. Bu hover kızağı, Space tuşuna basılı tutulurken ileri doğru itilir:

[SerializeField] private float accel = 12f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
    rb.linearDamping = 2f;
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(transform.forward * accel, ForceMode.Acceleration);
    }
}

12 ivme ve 2 sönümlemeyle kızak saniyede yaklaşık 6 birim hıza ulaşır; Space tuşu bırakıldığında sönümleme, kızağın sonsuza dek süzülmesine izin vermek yerine onu durdurur. ForceMode.Acceleration kütleyi hesaba katmadığından ağır kızak da hafif kızakla tamamen aynı şekilde hızlanır. Kızağın çarpıştırıcısında sürtünmesiz bir PhysicsMaterial vardır: sönümlemeye ek olarak zeminden kaynaklanan sürtünme de olsaydı, ulaşacağı azami hız daha düşük olurdu.

challenge icon

Görev

Orta

Arena Escape'i başlat: oyuncu kuvvetlerle kayar.

  1. Start() içinde, GetComponent satırından sonra rb.linearDamping = accel / topSpeed; ayarla; böylece hız topSpeed değerine yakın bir seviyede dengelenir.
  2. FixedUpdate() içinde new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) oluştur.
  3. normalized değerini accel ile çarpıp ForceMode.Acceleration ile rb.AddForce metoduna geçir.

“Oyna” düğmesine bas ve arenada kay. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private float accel = 18f;
    [SerializeField] private float topSpeed = 6f;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        // Sönümlemeyi ayarla, ardından ok tuşlarıyla oyuncuyu hareket ettir
    }
}

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

Kendi başına pratik yap: Unity playground