Unity工具之设置C#脚本执行顺序
简介
在Unity中经常需要调整脚本的执行顺序,以控制整个执行的流程,Unity本身通过设置ScriptExecutionOrder来解决此问题。
Unity提供了对应的工具可以直接调整脚本的执行顺序,但是此工具在使用上并不方便,本文将重点介绍另一种方式,通过为脚本添加属性,借助于编辑器功能进一步自动调整脚本的执行顺序。
声明
本文中的内容属于个人总结整理而来,个人水平有限,对于部分细节难免有理解错误及遗漏之处,如果您在阅读过程中有所发现,希望您能指正,同时文章中的部分内容也参考了其它大神的文章,如果文章中的内容侵犯了您的权益,表示非常歉意,请您指出,我将尽快修改。
如果您进行转载,请标明出处。
Unity工具之ScriptExecutionOrder(http://www.liyubin.com/articles/2019/03/20/1553056823837.html)
Unity中调整ScriptExecutionOrder方式
使用Unity菜单中的Editor->Project Setting->Script Execution Order,可以查看到调整窗口,如:
通过点击"+"按钮并查找需要调整的脚本,通过拖拽可以调整脚本的执行顺序,也可以通过给予特定的数值来调整脚本的执行顺序。
- 值为0,表示使用标准时间,默认值
- 值小于0,表示脚本的执行时机早于标准时间
- 值大于0,表示脚本的执行时机晚于标准时间
PS:添加的值仅仅表示执行的顺序,并非表示具体的时间
使用自定义工具调整ScriptExecutionOrder
如果项目中脚本较多,使用Unity自带的方式调整的话,就会发现不方便之处,项目中大量的脚本,查找就有一定的难度,所以需要一个简化的方式可以方便调整脚本的执行顺序。特此GitHub上提供了一开源项目,借助于此工具可以通过代码中指定属性,从而自动调整代码的执行顺序。
-
实现原理
通过制定属性标签指定脚本的执行顺序,借助于Unity本身对于脚本导入时会触发[UnityEditor.Callbacks.DidReloadScripts]标签指定的方法的特点,通过添加工具将指定的脚本的属性添加到Unity的ScriptExecutionOrder中
-
使用方式
工具内容非常简单,仅仅有两个脚本:ExecutionOrderAttributes.cs和ExecutionOrderAttributesEditor.cs,在项目中只要将ExecutionOrderAttributesEditor添加到Editor工具中即可。
示例代码: public class Script1 : MonoBehaviour { void Start () { Debug.Log("Second"); } }
-
ExecutionOrderAttribute
参数: order
通过直接指定固定的时间,来标识脚本的执行顺序
[ExecutionOrder(100)] public class Script2 : MonoBehaviour { void Start () { Debug.Log("Third"); } }
-
ExecuteAfterAttribute
参数:targetType,orderIncrease
通过指定具体的类型及时机,来标识脚本的执行在指定的类型之后
[ExecuteAfter(typeof(Script1))] public class Script3 : MonoBehaviour { void Start () { Debug.Log("First"); } } ```
-
ExecuteBeforeAttribute
参数:targetType,orderIncrease
通过指定具体的类型及时机,来标识脚本的执行在指定的类型之前
[ExecuteBefore(typeof(Script1))] public class Script4 : MonoBehaviour { void Start () { Debug.Log("First"); } } ```
PS: 可以同时使用ExecuteBefore和ExecuteAfter两个标签,标识脚本执行早于类型A,晚于类型B
[ExecuteAfter(typeof(Script2)), ExecuteAfter(typeof(Script3), orderIncrease = 20)] public class Script4 : MonoBehaviour { void Start () { Debug.Log("Fourth"); } }
-