• Unity 之 Invoke 与InvokeRepeting 函数控制定时调用


    文章目录

    在这里插入图片描述

    Invoke

    Unity游戏开发中,Invoke是一种用于延迟调用方法的方法。它允许你在一定的时间之后执行特定的函数或方法,通常用于执行定时任务,例如在一段时间后触发一个事件或在一定间隔内重复执行某个方法。Invoke方法的详细介绍如下:

    函数签名:

    void Invoke(string methodName, float time);
    
    • 1
    • methodName:要调用的方法的名称,以字符串形式提供。
    • time:要延迟的时间(以秒为单位),在这段时间后调用指定的方法。

    使用示例:

    假设你有一个脚本,其中包含一个名为DoSomething的方法,并且你想在2秒后调用这个方法。你可以使用Invoke来实现这个功能:

    using UnityEngine;
    
    public class ExampleScript : MonoBehaviour
    {
        void Start()
        {
            // 2秒后调用DoSomething方法
            Invoke("DoSomething", 2.0f);
        }
    
        void DoSomething()
        {
            // 这个方法将在2秒后被调用
            Debug.Log("Something has been done!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在上面的示例中,Invoke方法在Start方法中被调用,传入要延迟执行的方法名称和延迟的时间。当时间达到2秒后,Unity将自动调用DoSomething方法,然后在控制台中打印出相应的消息。

    取消Invoke:

    如果在调用Invoke后想要取消已计划的延迟调用,你可以使用CancelInvoke方法。例如,要取消上面示例中的延迟调用,可以这样做:

    void Start()
    {
        // 2秒后调用DoSomething方法
        Invoke("DoSomething", 2.0f);
    
        // 在1秒后取消延迟调用
        Invoke("CancelDelayedCall", 1.0f);
    }
    
    void CancelDelayedCall()
    {
        // 取消延迟调用
        CancelInvoke("DoSomething");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    上述示例中的CancelDelayedCall方法将在1秒后被调用,并使用CancelInvoke取消了对DoSomething方法的延迟调用。

    总之,Invoke是Unity中用于延迟调用方法的一种简单而强大的方法,对于实现定时任务或一次性事件非常有用。但请注意,过度使用Invoke可能会影响性能,因此在使用时要谨慎。在某些情况下,可能有更好的替代方案,如协程或时间线系统。

    InvokeRepeating

    InvokeRepeating是Unity中的另一个方法,用于重复调用指定的方法,类似于Invoke,但它允许你以一定的时间间隔重复调用方法。这可以用于创建周期性任务或循环执行某个函数。以下是关于InvokeRepeating的详细介绍:

    函数签名:

    void InvokeRepeating(string methodName, float time, float repeatRate);
    
    • 1
    • methodName:要调用的方法的名称,以字符串形式提供。
    • time:首次调用方法之前要延迟的时间(以秒为单位)。
    • repeatRate:重复调用方法之间的时间间隔(以秒为单位)。

    使用示例:

    假设你有一个脚本,其中包含一个名为DoSomething的方法,并且你想在游戏开始后,每隔3秒调用一次这个方法。你可以使用InvokeRepeating来实现这个功能:

    using UnityEngine;
    
    public class ExampleScript : MonoBehaviour
    {
        void Start()
        {
            // 延迟1秒后开始调用DoSomething方法,然后每隔3秒重复调用
            InvokeRepeating("DoSomething", 1.0f, 3.0f);
        }
    
        void DoSomething()
        {
            // 这个方法将每隔3秒被调用一次
            Debug.Log("Something is happening repeatedly!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在上面的示例中,InvokeRepeating方法在Start方法中被调用,传入要重复执行的方法名称、首次调用的延迟时间(1秒)以及重复调用的时间间隔(3秒)。这将导致DoSomething方法在游戏开始后延迟1秒首次被调用,然后每隔3秒重复调用一次。

    Invoke一样,你也可以使用CancelInvoke方法来取消InvokeRepeating的重复调用。

    总之,InvokeRepeating是Unity中用于创建定期重复任务的方法,适用于需要周期性执行某个函数的场景。但同样要注意,过度使用重复调用可能会对性能产生影响,因此请谨慎使用。

  • 相关阅读:
    5- 进入docker 打包的文件,查看内部文件
    Unity切换到另一个场景的时候,发现该场景变暗了
    多变量lookup argument
    [附源码]java毕业设计大学生学业预警系统
    面试官:MySQL 数据库查询慢,除了索引问题还可能是什么原因?面试架构师必备知识
    YB4556系列 28V 高输入耐压4056 可支持4.2V 4.3V 电池 并且具有多种封装方式 可应用于电子烟 充电器 等各类产品
    Win11打不开exe应用程序怎么办?Win11无法打开exe程序解决方法
    01-Kafka之单机和集群安装
    为什么建议游戏工作室使用海外住宅IP防封?
    【Handler机制分析】
  • 原文地址:https://blog.csdn.net/weixin_74850661/article/details/132773448