Arena
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 56 / 63.
Bu bölümde Arena Escape'i oluşturuyoruz. 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şlangıcından itibaren mevcut olan beş betikten oluşuyor: Player, Hunter, Spawner, Health ve Exit. Son dört betik şimdilik boş ve her ders bunlardan birini dolduruyor.
Oyuncu, kendi ayarladığı bir hız yerine kuvvetlerle hareket eder; böylece bir avcının geri tepme kuvveti, hareketi silmek yerine ona eklenir. Tek başına bir itme, oyuncuyu sonsuza kadar hızlandırırdı; bu yüzden linearDamping her adımda hızının bir kısmını azaltır: sabit bir itme, ivmenin sönümlemeye bölünmesiyle bulunan yaklaşık en yüksek hızda dengelenir. Bu hover kızağı, Space 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 ise sönümleme, sonsuza kadar süzülmesini önleyerek onu durdurur. ForceMode.Acceleration kütleyi dikkate almaz; bu nedenle ağır bir kızak da hafif bir 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ğı en yüksek hız daha düşük olurdu.
Görev
OrtaArena Escape'i oyuncuyla başlat. Inspector, Player betiğine accel (18) ve topSpeed (6) değerlerini verir. Oyuncunun kütlesi 2'dir ve sürtünmesiz bir malzemeye sahiptir; diğer dört betik şimdilik boş kalır.
Startiçinde Rigidbody'ninlinearDampingdeğeriniaccel / topSpeedolarak ayarla; böylece oyuncu yaklaşıktopSpeedhızında sabitlenir.- Her fizik adımında ok tuşlarıyla oyuncuyu it; x ekseninde sola ve sağa, z ekseninde ileri ve geri hareket ettir.
ForceMode.Accelerationveacceldeğerinde ivme kullan. - Ok tuşlarının yönünü normalize et; böylece çapraz hareket düz hareketten daha hızlı olmaz.
Play'e bas ve arenada kayarak hareket et, ardından Check'e 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
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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 Duvar