Menu
CoddyTech

Öldürme Bölgeleri

Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 19 / 71.

Ölüm bölgesi, oyuncunun ulaşmaması gereken bir yerin üzerindeki tetikleyicidir: lav, dikenler veya seviyenin altındaki boşluk. Oyuncu buraya girdiğinde doğma noktasına geri gönderilir. Burada bunu lavın kendi betiği yapar; doğma noktası, Inspector'da ayarlanan bir Transform alanındadır:

public Transform spawnPoint;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        other.transform.position = spawnPoint.position;
        other.attachedRigidbody.linearVelocity = Vector3.zero;
    }
}

other.attachedRigidbody, giren çarpıştırıcının bağlı olduğu Rigidbody'dir. transform.position ayarlandığında oyuncu ışınlanır; yeniden doğmak için gereken de budur. Ancak Rigidbody, zıplama boyunca hızını korur: saniyede 10 birim hızla düşen bir oyuncu, doğma noktasına hâlâ saniyede 10 birim hızla düşerek gelir; lavın içine koşarak giren oyuncu da koşmaya devam eder ve doğruca tekrar lavın içine girer. linearVelocity değerini Vector3.zero olarak ayarlamak, oyuncunun oraya hareketsiz şekilde gelmesini sağlar. Etiket kontrolü, lavın içine düşen diğer her şeyi olduğu yerde bırakır.

challenge icon

Görev

Kolay

Oyuncunun yeniden doğmasını sağla. Bu betik oyuncunun üzerinde olduğundan transform ve body bileşenlerini hareket ettirir, other bileşenini değil.

  1. Start() içinde Vector3 respawn alanını transform.position olarak ayarla.
  2. OnTriggerEnter(Collider other) içinde, other.CompareTag("Checkpoint") olduğunda respawn = transform.position; olarak ayarla.
  3. other.CompareTag("KillZone") olduğunda transform.position = respawn; ve body.linearVelocity = Vector3.zero; olarak ayarla.

“Oyna” düğmesine bas ve köprüden aşağı yürü. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

public class Player : MonoBehaviour
{
    public float force = 12f;
    Rigidbody body;
    Vector3 input;
    // respawn: oyuncunun geri döndüğü yer

    void Start()
    {
        body = GetComponent<Rigidbody>();
    }

    void Update()
    {
        input = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
    }

    void FixedUpdate()
    {
        body.AddForce(input * force);
    }

    // Checkpoint: oyuncunun bulunduğu yeri hatırla. KillZone: hareketsiz durarak o noktaya geri dön.
}

Fizik ve Oynanış bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground