当前位置: 首页 > news >正文

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

相关文章:

  • 使用 Cookie 实现认证跳转功能
  • 生产级编排AI工作流套件:Flyte全面使用指南 — Core concepts Launch plans
  • MinerU本地化部署可视化界面
  • 【前端】[vue3] [uni-app]使用 vantUI 框架
  • 在24GB显存大小的GPU上运行27GB的Pytorch模型
  • 05-SpringBoot
  • python报错:在int中找不到引用value错误问题原因及解决方案
  • SpringBoot通过虚拟路径指定文件上传下载目录
  • 【深度剖析】安踏体育的数字化转型(上篇2)
  • 网站推荐(第四期)
  • 淘宝商家层级存在流量上限怎么办,如何突破流量上限?
  • 从数据包到可靠性:UDP/TCP协议的工作原理分析
  • 从零开始学习three.js(19):一文详解three.js中的辅助类Helper
  • PCL PolygonMesh 与 TextureMesh 源码阅读与简单测试
  • 从前序与中序遍历序列构造二叉树(中等)
  • ubuntu 更新华为源
  • 网络世界的“百变身份“:动态IP让连接更自由
  • DevExpressWinForms-RichEditControl-基础应用
  • FreeSWITCH Jitter Buffer 技术解析与应用指南
  • 【CanMV K230】AI_CUBE1.4
  • 国际金价下跌,中概股多数上涨,穆迪下调美国主权信用评级
  • 贞丰古城:新垣旧梦间的商脉与烟火
  • 中欧互动中的合作与分歧:务实需求将克服泛安全化的“政治钟摆”
  • 2000多年前的“新衣”长这样!马王堆文物研究新成果上新
  • 乌克兰谈判代表团由12人组成,乌防长率领
  • 视频丨中国海警成功救助8名外籍遇险渔民,韩方向中方致谢