Unity:延迟执行函数:Invoke()

目录

Unity 中的 Invoke() 方法详解

什么是 Invoke()?

基本使用方法

使用要点

延伸功能 

❗️Invoke 的局限与注意事项


在Unity中,延迟执行函数是游戏逻辑中常见的需求,比如:

  • 延迟切换场景

  • 延迟播放音效或动画

  • 给玩家时间看完结算界面或过场动画

Unity 中的 Invoke() 方法详解

什么是 Invoke()?

Invoke() “唤起” 是 Unity 提供的一个 内置函数,用于在指定时间后调用某个函数。

它的定义如下:

Invoke(string methodName, float time);
  • methodName: 你希望被延迟调用的方法名称(字符串格式)

  • time: 延迟的时间(秒)

基本使用方法

假设我们要在角色到达终点后,延迟2秒再切换到主菜单场景:

using UnityEngine;
using UnityEngine.SceneManagement;

public class FinishLine : MonoBehaviour
{
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            // 延迟调用 LoadMainMenu 方法,延迟 2 秒
            Invoke("LoadMainMenu", 2f);
        }
    }

    void LoadMainMenu()
    {
        SceneManager.LoadScene("MainMenu");
    }
}

使用要点

特点说明
 简洁无需额外协程、只写一行就能实现延迟
 字符串调用Invoke() 使用方法名的字符串,不安全(容易拼错)
 支持取消可用 CancelInvoke("函数名") 取消未触发的调用
 不阻塞主线程延迟期间,游戏继续运行,非阻塞操作

延伸功能 

1.  取消 Invoke 调用 

CancelInvoke("LoadMainMenu");

 可用于用户点击“取消按钮”时停止延迟操作。

2.  重复调用函数:InvokeRepeating

除了单次延迟执行,Unity 还提供了重复执行的方式:

InvokeRepeating("RepeatFunction", 1f, 3f);
  • 1 秒后首次执行

  • 每 3 秒重复一次

可用于:

  • 重复生成敌人

  • 定时扣血

  • 心跳检测逻辑

❗️Invoke 的局限与注意事项

虽然 Invoke() 非常简洁,但也存在一些局限:

局限说明
 不支持参数传递被调用的方法不能有参数
不易调试函数名以字符串形式传入,拼错不报错(运行时错误)
 不能中途修改时间延迟时间一旦设定,不能动态更改
无法链式操作与协程比,不支持等待其他操作完成后继续执行逻辑

 实用案例:延迟销毁物体

public class Bomb : MonoBehaviour
{
    void Start()
    {
        Invoke("Explode", 3f);  // 3秒后爆炸
    }

    void Explode()
    {
        // 播放爆炸音效、粒子效果等
        Destroy(gameObject);
    }
}

当你只需要延迟一段时间调用一个无参数的方法时,Invoke() 是最简单直接的方式。

但如果你需要更复杂的延迟控制、等待协作任务(如动画或粒子播放完成)——请使用 Coroutine

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值