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.
Görev
OrtaArena Escape'i başlat: oyuncu kuvvetlerle kayar.
Start()içinde,GetComponentsatırından sonrarb.linearDamping = accel / topSpeed;ayarla; böylece hıztopSpeeddeğerine yakın bir seviyede dengelenir.FixedUpdate()içindenew Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"))oluştur.normalizeddeğeriniaccelile çarpıpForceMode.Accelerationilerb.AddForcemetoduna 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
1Rigidbody
Yerçekimi ve KütleAddForce ile İtmeDürtüyle ZıplamaFizik için FixedUpdateHızKinematik CisimlerTekrar: Fırlatma Rampası2Çarpışmalar
OnCollisionEnterNeye Çarptım?Çarpınca KırılYerde DurmakSekme ve SürtünmeCollider ŞekilleriTekrar: Kırılabilir DuvarKendi başına pratik yap: Unity playground