Menu
CoddyTech

Vùng tiêu diệt

Thuộc phần Vật lý và lối chơi trong hành trình Unity của Coddy. Bài học 19 trên 71.

Vùng tiêu diệt là một vùng kích hoạt đặt ở nơi người chơi không được đến: dung nham, chông nhọn hoặc khoảng không bên dưới màn chơi. Khi người chơi bước vào đó, họ sẽ quay lại điểm xuất hiện. Ở đây, script của dung nham tự xử lý việc này, với điểm xuất hiện được đặt trong trường Transform ở cửa sổ Inspector:

public Transform spawnPoint;

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

other.attachedRigidbody là Rigidbody thuộc về collider đi vào vùng kích hoạt. Đặt transform.position sẽ dịch chuyển tức thời người chơi, đúng với cách cần làm khi hồi sinh. Tuy vậy, Rigidbody vẫn giữ nguyên vận tốc sau cú nhảy: người chơi rơi vào với tốc độ 10 đơn vị mỗi giây sẽ xuất hiện tại điểm xuất hiện và vẫn rơi với tốc độ 10, còn người chơi chạy vào dung nham sẽ tiếp tục chạy thẳng trở lại đó. Đặt linearVelocity thành Vector3.zero giúp người chơi xuất hiện trong trạng thái đứng yên. Kiểm tra thẻ giúp mọi thứ khác rơi vào dung nham vẫn ở nguyên vị trí.

challenge icon

Thử thách

Dễ

Cho người chơi hồi sinh. Tập lệnh này nằm trên người chơi, vì vậy nó di chuyển transform và body, không phải other.

  1. Trong Start(), đặt trường Vector3 respawn thành transform.position.
  2. Trong OnTriggerEnter(Collider other), khi other.CompareTag("Checkpoint"), đặt respawn = transform.position;.
  3. Khi other.CompareTag("KillZone"), đặt transform.position = respawn; và body.linearVelocity = Vector3.zero;.

Nhấn Chơi và đi khỏi cây cầu. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class Player : MonoBehaviour
{
    public float force = 12f;
    Rigidbody body;
    Vector3 input;
    // respawn: vị trí người chơi xuất hiện lại

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

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

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

    // Checkpoint: ghi nhớ vị trí của người chơi. KillZone: đưa người chơi về vị trí đó và đứng yên.
}

Tất cả bài học trong Vật lý và lối chơi

Tự luyện tập: Playground Unity