Unity——Invoke

Invoke官方文档

MonoBehaviour.Invoke 描述
public void Invoke (string methodName, float time) 在 time 秒后调用 methodName 方法。如果时间设置为 0,则在下一个更新周期调用方法。在这种情况下,直接调用函数会更好。为获得更好的性能和可维护性,请改为使用协程。

详述

  1. 它应该在脚本的生命周期里的(Start、Update、OnGUI、FixedUpdate、LateUpdate)中被调用。
  2. Invoke( )不能接受含有参数的方法。
  3. 在Time.timeScale = 0时, Invoke() 无效,因为它不会被调用到。

Time.timeScale会影响Invoke

代码

    void Update() {
        if (Input.GetKeyDown(KeyCode.Space)) {
            Time.timeScale = 0.1f;
            Debug.Log("开始:"+Time.unscaledTime);
            Invoke(nameof(Print), 1f);
        }
    }
    private void FixedUpdate() {
        if (Input.GetKeyDown(KeyCode.Q)) {
            Time.timeScale = 0.1f;
            Debug.Log("开始:" + Time.unscaledTime);
            Invoke(nameof(Print), 1f);
        }
    }

    private void Print() {
        Debug.Log("结束:" + Time.unscaledTime);
    }

操作:先按空格,打印结束后按下Q,打印如下内容,发现调用时间从设定的1秒变为受TimeScale影响的10秒。
Unity——Invoke_第1张图片
结论:不论哪里调用Invoke()函数,都会受Time.timeScale影响。

你可能感兴趣的:(Unity,unity,游戏引擎)