Menu
CoddyTech

Invoke

本课属于 Coddy Unity 学习旅程的“物理与游戏玩法”单元。第 22 课,共 71 课。

Invoke("Explode", 3f) 会在 3 秒后调用脚本自身的 Explode 方法一次,后面的代码会立即继续执行。Unity 会根据以字符串形式给出的名称查找方法,而且该方法不接受参数。这个炸弹会在游戏开始 3 秒后爆炸:

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

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

因为名称是字符串,编译器无法检查它。Invoke("Explod", 3f) 可以通过编译,但 3 秒后,Unity 会记录 Trying to Invoke method: Bomb.Explod couldn't be called.,而不是让炸弹爆炸。C# 的 nameof 可以解决这个问题:nameof(Explode) 是字符串 "Explode",由编译器根据经过检查的名称生成,因此其中的拼写错误会导致编译错误,你可以在游戏运行前发现。写成 Invoke(nameof(Explode), 3f);。

challenge icon

挑战

简单

让平台在玩家落地片刻后崩塌。

  1. 在 OnCollisionEnter 中,当 collision.gameObject.CompareTag("Player") 时,调用 Invoke(nameof(Fall), delay);。
  2. 添加 void Fall():设置 body.isKinematic = false;,并记录 Crumble!。

按下“开始”并走上平台:一秒后,平台就会掉落。然后点击“检查”。

亲手试试

using UnityEngine;

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

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

    void OnCollisionEnter(Collision collision)
    {
        // 玩家落到平台上时:等待 delay 秒后让平台下落
    }

    // Fall():启用平台的物理效果,并记录 Crumble!
}

物理与游戏玩法中的所有课

自己练习: Unity 在线编辑器