Menu
CoddyTech

Güçlendirme Yakala

Coddy'nin Unity Oyunu: Tuğla Kırma kursunda ders 15 / 19.

Güçlendirici yakalamayı kendisi algılar: tetikleyici çarpıştırıcısı raketin çarpıştırıcısına dokunur ve her iki gövde de kinematiktir; bu, OnTriggerEnter için yeterlidir. Topun yanından da geçer, bu yüzden önce etiketi kontrol eder.

Bir enum türleri adlandırır ve her prefab kendi türünü Inspector'da ayarlar; böylece tek bir betik ikisine de hizmet eder:

public enum Kind { Wide, Multiball }
public Kind kind;

if (kind == Kind.Multiball) Debug.Log("Three balls");

other.GetComponent<Paddle>(), güçlendiricinin dokunduğu nesnedeki Paddle betiğini bulur. Şimdilik Genişlet yalnızca günlük kaydı oluşturur; sonraki derste raketin büyümesi sağlanacak.

challenge icon

Görev

Zor

Düşen bir güçlendirmeyi paletle yakala.

  1. PowerUp içinde public enum Kind { Wide, Multiball } ve public Kind kind; ekle (her prefab kendi kind değerini ayarlar).
  2. OnTriggerEnter(Collider other) ekle: other.CompareTag("Paddle") koşulu sağlanmıyorsa geri dön; Wide olan bir güçlendirme other.GetComponent<Paddle>().Widen(); çağrısı yapar, ardından Destroy(gameObject); çağrılır.
  3. Paddle içinde şimdilik Wide paddle mesajını kaydeden public void Widen() ekle.

“Oyna” düğmesine bas ve yeşil olanı yakala: kaybolur ve Console'da Wide paddle görünür. Ardından “Kontrol et”.

Kendin dene

using UnityEngine;
using UnityEngine.InputSystem;

public class Paddle : MonoBehaviour
{
    public float speed = 14f;
    public float wallX = 8f;   // yan duvarların iç yüzeyleri -wallX ve wallX konumlarındadır

    Rigidbody rb;

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

    void FixedUpdate()
    {
        float input = 0f;
        if (Keyboard.current.leftArrowKey.isPressed || Keyboard.current.aKey.isPressed) input -= 1f;
        if (Keyboard.current.rightArrowKey.isPressed || Keyboard.current.dKey.isPressed) input += 1f;

        Vector3 target = rb.position + Vector3.right * input * speed * Time.fixedDeltaTime;
        float halfWidth = transform.localScale.x / 2f;
        target.x = Mathf.Clamp(target.x, -wallX + halfWidth, wallX - halfWidth);
        rb.MovePosition(target);
    }
}

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

Kendi başına pratik yap: Unity playground