Menu
CoddyTech

Invoke

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 22 trên 71.

Invoke("Explode", 3f) gọi phương thức Explode của chính script một lần sau 3 giây, còn code phía sau chạy tiếp ngay lập tức. Unity tìm phương thức theo tên được cung cấp dưới dạng chuỗi, và phương thức này không nhận tham số nào. Quả bom này phát nổ sau khi trò chơi bắt đầu 3 giây:

void Start()
{
    Invoke("Explode", 3f);
}

void Explode()
{
    Debug.Log("Boom");
    Destroy(gameObject);
}

Vì tên được viết dưới dạng chuỗi, trình biên dịch không thể kiểm tra tên đó. Invoke("Explod", 3f) vẫn biên dịch được, nhưng 3 giây sau Unity ghi nhật ký Trying to Invoke method: Bomb.Explod couldn't be called. thay vì làm quả bom phát nổ. Từ khóa nameof của C# khắc phục điều đó: nameof(Explode) là chuỗi "Explode", do trình biên dịch tạo ra từ một tên đã được kiểm tra. Vì vậy, nếu viết sai tên bên trong, bạn sẽ gặp lỗi biên dịch trước khi trò chơi chạy. Hãy viết Invoke(nameof(Explode), 3f);.

challenge icon

Thử thách

Dễ

Khi người chơi đáp xuống, hãy làm cho bệ sụp xuống sau đó một chút.

  1. Trong OnCollisionEnter, khi collision.gameObject.CompareTag("Player"), hãy gọi Invoke(nameof(Fall), delay);.
  2. Thêm void Fall(): đặt body.isKinematic = false; và ghi nhật ký Crumble!.

Nhấn Chơi rồi bước lên bệ: một giây sau, bệ sẽ rơi xuống. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class Crumble : MonoBehaviour
{
    public float delay = 1f;
    Rigidbody body;

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

    void OnCollisionEnter(Collision collision)
    {
        // Khi người chơi tiếp đất: cho nền tảng rơi sau delay giây
    }

    // Fall(): bật vật lý cho nền tảng và ghi Crumble! vào nhật ký
}

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

Tự luyện tập: Playground Unity