Raket
Coddy'nin Unity Oyunu: Tuğla Kırma kursunda ders 1 / 16.
Bu kursta 3D Brick Breaker'ı yapacaksın: altta bir raket, duvarlar arasında seken bir top ve kırılacak bir tuğla duvarı. Her ders bir özellik ekler: tuğlalar, canlar, seviyeler, oyun bitti ekranı ve raketi genişleten ya da topu bölen güçlendirmeler. Sahne hazır: kamera oyun alanına önden bakıyor ve her şey z = 0 düzleminde x ve y yönlerinde hareket ediyor. Paddle, Ball, Brick, GameManager ve PowerUp betikleri şimdilik kısa iskeletlerdir.
Raketin kinematik bir Rigidbody'si vardır ve FixedUpdate içinde MovePosition ile hareket ettirilir; böylece fizik motoru hareketini algılar ve topun sekmeleri daha sonra bundan yararlanabilir. Kinematik bir gövde, Rigidbody'si olmayan çarpıştırıcılar tarafından asla durdurulmaz; bu yüzden yan duvarlar onu geride tutamaz: betik, raketi sınırlar içinde tutar. Merkez duvarda sınırlandırılsaydı nesnenin yarısı duvarın içinde kalırdı; bu nedenle sınır, duvardan nesnenin boyutunun yarısı çıkarılarak belirlenir. y = 0 ile y = 12 arasındaki bir kuyudaki bu asansör bunu y ekseninde şöyle yapar:
float halfHeight = transform.localScale.y / 2f;
Vector3 target = rb.position + Vector3.up * input * liftSpeed * Time.fixedDeltaTime;
target.y = Mathf.Clamp(target.y, 0f + halfHeight, 12f - halfHeight);
rb.MovePosition(target);Burada input, yukarı giderken 1, aşağı giderken -1 ve diğer durumlarda 0'dır. 2 birim yüksekliğindeki bir asansör, merkezini 1 ile 11 arasında tutar; böylece uçları tam olarak 0 ve 12'de durur. Cube temel nesnesinin her kenarı 1 birimdir; bu nedenle localScale.y asansörün yüksekliğidir ve bunu her adımda okumak, oyun çalışırken boyut değişirse sınırın doğru kalmasını sağlar.
Görev
KolayRaketi Paddle'ın FixedUpdate() metodunda hareket ettirin:
- Bir
float inputoluşturun: sol ok veya A basılıyken -1, sağ ok veya D basılıyken 1, aksi durumda 0. - Hedefi hesaplayın: Rigidbody'nin konumunu
input * speed * Time.fixedDeltaTimekadar sağa taşıyın. - Rakete duvarların iç yüzeylerinde duracak şekilde hedefin x değerini sınırlandırın:
-wallXvewallX. Rakete genişliğitransform.localScale.xdeğeridir. rb.MovePositionile oraya hareket edin.
Play'e basın, raketi her iki duvara da sürün, ardından Check'e basın.
Kendin dene
using UnityEngine;
using UnityEngine.InputSystem;
public class Paddle : MonoBehaviour
{
public float speed = 14f;
public float wallX = 8f; // Yan duvarların iç yüzleri -wallX ve wallX konumundadır
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// Ok tuşlarıyla veya A ve D tuşlarıyla hareket et ve duvarların arasında kal.
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.