您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页[转]关于Unity3D对象和脚本实例调用的顺序探究

[转]关于Unity3D对象和脚本实例调用的顺序探究

来源:爱go旅游网
[转]关于Unity3D对象和脚本实例调⽤的顺序探究关于Unity3D对象和脚本实例调⽤的顺序探究

我们先来看⼀些有趣Unity实例顺序的⼩实验。有图有!!

注:以上打印的代码语句如下: [csharp]

1. void Start () { 2. print(\"-----\" + this.transform.name); 3. }

从以上的打印我们⾄少可以得出的实验结果!

总结:Unity从树形⽬录的最底端的最深层开始实例化对象,然后逐个向上实例!

我们再来实验下关于脚本⽣命周期的⼩实验:

关于脚本的⽣命周期⽹上和官⽅都有很多资源,这⾥主要实验是关于对象的实例顺序及对象依附脚本的执⾏顺序!

脚本代码: [csharp]

1. public class GroupData : MonoBehaviour 2. { 3.

4. void Awake() 5. {

6. print(\"--\" + this.transform.name+ \"-------Awake-----------------\"); 7. } 8.

9. // Use this for initialization 10. void Start() 11. {

12. print(\"----Start-\" + this.transform.name); 13. } 14.

15. // Update is called once per frame

16. void Update() 17. { 18. 19. } 20.

21. void OnDestroy() 22. {

23. print(\"*******************\"+ this.transform.name + \"********Destroy!\"); 24. }

25. }

运⾏效果图: 初始化的状态

由以上的打印可以看出,在初始对象以及脚本的调⽤上,Unity的实例始终是按照树形结构从最底层开始加载调⽤,然后逐层向上!终⽌状态:

奇妙的事情发⽣啦! 哈~ 在对象销毁的时候,Unity是优先Destroy上层的对象,再操作它的⼦对象(从上于下的顺序)销毁!

最后我们关注下,⼀个对象关联多个脚本时的输出情况,这⾥也关注初始化和销毁两个⾏为!

每个对象的脚本绑定形式:

三个脚本的打印形式如: [csharp]

1. // Use this for initialization 2. voidStart() 3. {

4. print(\"----Start-\" + this.transform.name + \5. } 6.

7. // Update is called once per frame 8. void Update() 9. { 10. 11. } 12.

13. void OnDestroy() 14. {

15. print(\"*******************\"+ this.transform.name + \"********Destroy!\" + \16. }

我们先从当个脚本的执⾏情况看看:

我们再交换下三个脚本的顺序,看看打印的情况: 总结:

初始化:对于同⼀对象绑定多个脚本,初始化加载总会从⽬录的最底层开始,再逐级向上!销毁:也许是因为同级⽬录,所以销毁的顺序按⽬录层,从上到下依次执⾏!

最后我们看看多层多脚本的执⾏情况: 总结:

对于对象视图,依然从最底开始,再到单⼀对象的脚本视图,⼜从底部开始! 个⼈来说这⾥有点⼩意外这⾥!!哈哈~~以下为销毁效果图:

销毁的顺序跟我们上⾯的实验结果没有多⼤的相差!

假如:我们把Group20和Group210的脚本都减少⼀个,只放置⼀个脚本,看看脚本的执⾏情况!

以下是销毁的效果图:

我们试着按代码的思路去写的话我猜有可能是这样⼦的:

1.查找对象的脚本绑定,记录最⼤的脚本绑定层数2.查找对象的分布层数,建⽴树形层级

3.对于加载过程,从脚本层数开始的最底端开始遍历整个对象分布的树形层

4.对于销毁过程,则反过来由对象视图的树形层开始,依然销毁对象的脚本,并且优先销毁最底层的⽗节点,依次向上!

仅为记录⼯作中的⼀些疑问,有不对的地⽅,欢迎⼤家指正,交流!谢谢理解!

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务