Menu
CoddyTech

Bir Top Kaybet

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

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

Topu kaçırmak bir cana mal olur ve topu yeniden paletin üzerine getirir.

  1. Ball içinde public void ResetToPaddle() yaz: launched = false; ve hız için Vector3.zero.
  2. Ball'ın OnTriggerEnter metodunda, DeathZone etiketi taşıyan nesneye girildiğinde GameManager.Instance.BallLost(this) çağrılır.
  3. GameManager içinde public int lives = 3; ve public void BallLost(Ball lost) ekle: bir can eksilt, ardından lost.ResetToPaddle();

“Oyna” düğmesine bas ve topu kaçır: top yeniden paletin üzerinde bekler. Ardından “Kontrol et” düğmesine 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

Kendi başına pratik yap: Unity playground