Menu
CoddyTech

Bir Top Kaybet

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

Raketi geçen top kaybedilir. Raketin altında sahnede artık bir DeathZone bulunuyor: Is Trigger olarak ayarlanmış kutu çarpıştırıcısına ve DeathZone etiketine sahip bir nesne. Tetikleyici hiçbir şeyi durdurmaz; Rigidbody bileşenine sahip bir şey içine girdiğinde OnTriggerEnter(Collider other) gönderir. Top, kaybı canları yöneten ve sırada ne olacağına karar veren GameManager'a bildirir.

Suya düşen misket başlangıç noktasında yeniden başlar:

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Water")) Respawn();
}

void Respawn()
{
    rb.linearVelocity = Vector3.zero;
    transform.position = spawnPoint.position;
}

Topun misketten daha az şeye ihtiyacı var. launched false iken Update() zaten her karede topu raketin üzerine yerleştiriyor; bu yüzden sıfırlama yalnızca bu bayrağı temizleyip topu durdurmalı: sonraki karede top yeniden raketin üzerine gelir ve Space ile tekrar fırlatılır.

challenge icon

Görev

Orta
  1. Ball içinde public void ResetToPaddle() yaz: top artık fırlatılmış durumda olmaz ve hareket etmeyi durdurur.
  2. Ball öğesine OnTriggerEnter ekle: DeathZone etiketi taşıyan nesneye girdiğinde GameManager.Instance.BallLost(this) çağrılır.
  3. GameManager içine public int lives = 3 ve public void BallLost(Ball lost) ekle: bir can azalır ve kaybedilen top rakete geri döner.

Henüz oyun bitmediği için canlar şimdilik 0'ın altına düşebilir.

Play'e bas, topu bilerek kaçır, yeniden fırlat ve ardından Check'e bas.

Kendin dene

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Brick brickPrefab;
    public Transform wall;
    public int rows = 5;
    public int columns = 9;
    public float spacingX = 1.75f;
    public float spacingY = 0.75f;
    public float topY = 6f;
    public int[] rowHits = { 2, 1, 1, 1, 1 };

    int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildWall();
    }

    void BuildWall()
    {
        float left = -(columns - 1) * spacingX / 2f;
        for (int row = 0; row < rows; row++)
        {
            for (int col = 0; col < columns; col++)
            {
                Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
                Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
                brick.SetHits(rowHits[row]);
            }
        }
    }

    public void BrickBroken(Brick brick)
    {
        score += brick.points;
    }
}
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