Unity 之 ExecuteAlways正在取代ExecuteInEditMode

举报
陈言必行 发表于 2021/12/11 13:43:14 2021/12/11
【摘要】 Unity 之 ExecuteAlways正在取代ExecuteInEditMode

@[TOC](Unity 基础 之 ExecuteAlways介绍)

在Unity的编辑器中分为三种模式:

  1. 编辑器模式:打开任意工程,不做任何操作Unity就处于一个可编辑的状态,这就是编辑器模式;
  2. 运行模式:当我们点击Play(▶)运行一个场景时,这时Unity就处于运行模式;
  3. 预制体模式:当Unity进入Prefab时对应的编辑状态叫预制体模式;

ExecuteInEditMode

描述:使脚本的所有实例都在编辑模式下执行。

默认情况下,只在编辑器运行模式下执行 MonoBehaviours。通过添加此属性,MonoBehaviour 的任何实例都将在编辑器处于编辑模式时执行其回调函数。

此属性正在逐步被淘汰,因为它不考虑预制体模式。如果在预制件模式下编辑一个带有 MonoBehaviour 并启用了此属性的预制件,然后进入播放模式,则编辑器将退出预制件模式,以防止由仅用于播放模式的逻辑引起的预制件意外修改。

要指示 MonoBehaviour 正确考虑了预制件模式并且在播放模式期间以预制件模式打开是安全的,可以使用属性 ExecuteAlways 取代此属性。

下面几个函数和运行模式下调用情况不同:

  • Update:只有当场景发生变化时才会调用。
  • OnGUI:在“游戏视图”接收到非编辑器时调用。事件它不使用(例如,EventType.ScrollWheel)并且不转发到编辑器的键盘快捷方式系统(例如,EventType.KeyDown, EventType.KeyUp)。转发到游戏视图的事件将排队,不能保证立即处理。
  • OnRenderObject:在场景视图或游戏视图的每一次重绘上都调用其他呈现回调函数。

ExecuteAlways

使脚本的实例始终执行,作为Play Mode的一部分和Editing。

默认情况下,MonoBehaviours仅在Play Mode下执行。

当希望脚本作为编辑器工作的一部分执行某些操作时,可以使用[ExecuteAlways]属性,该工具不一定与构建

仅在Scene发生改变是调用Update
当Game 试图接收到它不使用的非编辑器事件(例如,EventType.ScrollWheel)会调用OnGUI
在场景试图或者Game试图的每次重绘都会调用OnRenderObject和其他渲染回调函数

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。