Menu
CoddyTech

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.

challenge icon

Görev

Kolay

Raketi Paddle'ın FixedUpdate() metodunda hareket ettirin:

  1. Bir float input oluşturun: sol ok veya A basılıyken -1, sağ ok veya D basılıyken 1, aksi durumda 0.
  2. Hedefi hesaplayın: Rigidbody'nin konumunu input * speed * Time.fixedDeltaTime kadar sağa taşıyın.
  3. Rakete duvarların iç yüzeylerinde duracak şekilde hedefin x değerini sınırlandırın: -wallX ve wallX. Rakete genişliği transform.localScale.x değeridir.
  4. rb.MovePosition ile 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.
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity Oyunu: Tuğla Kırma bölümündeki tüm dersler