前言
今天在看unity官方的demo的代码,看到了这样的一个特性 [ExecuteInEditMode]
,查了下官方的API(官方API链接),记录下自己的理解。
一、Unity的模式
在介绍 [ExecuteInEditMode]
之前,先来看下了解下Unity 的三种模式
1.Edit Mode
就是大家通常说的编辑器模式下,不用点击Play运行项目。
2.Play Mode
按下Play正常运行项目的时候,就是Play Mode。
3.Prefab Mode
就是在编辑预制体Prefab的时候,就是Prefab Mode。
二、 [ExecuteInEditMode]
及相关特性介绍
1. [ExecuteInEditMode]
字面翻译就是在编辑器模式下调用。在正常运行的时候还是可以调用的。 在编辑器模式下调用的时候,有的函数跟直接在运行模式下调用是不一样的。 Update
是只有在场景改变时,才会调用,切进程也会调用。 Awake
和Start
是脚本加载的时候才会调用,就是手动挂载脚本的时候才会调用。 OnGUI
当GameView接收到Event时才调用。 OnRenderObject
和其他的渲染回调函数,是当SceneView或者GameView重绘时才会调用,比如鼠标移动的时候,OnRenderObject
会被调用。 在正常运行模式下调用还是正常的调用。
2.[ ExecuteAlways]
字面意思就是在所有模式下调用。使脚本的实例在播放模式期间以及编辑时始终执行(包括在编辑Prefab的情况下)。 它的函数调用基本和 [ExecuteInEditMode]
一样,只是额外加上在编辑预制体的模式下也可以调用,其他的和 [ExecuteInEditMode]
都一样。