关于Unity3D对象和脚本实例调用的顺序探究
2012-11-05 22:52
323 查看
关于Unity3D对象和脚本实例调用的顺序探究
我们先来看一些有趣Unity实例顺序的小实验。有图有真相!!注:以上打印的代码语句如下:
void Start () { print("-----" + this.transform.name); }
从以上的打印我们至少可以得出的实验结果!
总结:Unity从树形目录的最底端的最深层开始实例化对象,然后逐个向上实例!
我们再来实验下关于脚本生命周期的小实验:
关于脚本的生命周期网上和官方都有很多资源,这里主要实验是关于对象的实例顺序及对象依附脚本的执行顺序!
脚本代码:
public class GroupData : MonoBehaviour { void Awake() { print("--" + this.transform.name+ "-------Awake-----------------"); } // Use this for initialization void Start() { print("----Start-" + this.transform.name); } // Update is called once per frame void Update() { } void OnDestroy() { print("*******************"+ this.transform.name + "********Destroy!"); } }
运行效果图:
初始化的状态
由以上的打印可以看出,在初始对象以及脚本的调用上,Unity的实例始终是按照树形结构从最底层开始加载调用,然后逐层向上!
终止状态:
奇妙的事情发生啦! 哈~ 在对象销毁的时候,Unity是优先Destroy上层的对象,再操作它的子对象(从上于下的顺序)销毁!
最后我们关注下,一个对象关联多个脚本时的输出情况,这里也关注初始化和销毁两个行为!
每个对象的脚本绑定形式:
三个脚本的打印形式如:
// Use this for initialization voidStart() { print("----Start-" + this.transform.name + ",class:GroupData"); } // Update is called once per frame void Update() { } void OnDestroy() { print("*******************"+ this.transform.name + "********Destroy!" + ",class:GroupData"); }
我们先从当个脚本的执行情况看看:
我们再交换下三个脚本的顺序,看看打印的情况:
总结:
初始化:对于同一对象绑定多个脚本,初始化加载总会从目录的最底层开始,再逐级向上!
销毁:也许是因为同级目录,所以销毁的顺序按目录层,从上到下依次执行!
最后我们看看多层多脚本的执行情况:
总结:
对于对象视图,依然从最底开始,再到单一对象的脚本视图,又从底部开始!
个人来说这里有点小意外这里!!哈哈~~
以下为销毁效果图:
销毁的顺序跟我们上面的实验结果没有多大的相差!
假如:我们把Group20和Group210的脚本都减少一个,只放置一个脚本,看看脚本的执行情况!
以下是销毁的效果图:
我们试着按代码的思路去写的话我猜有可能是这样子的:
1.查找对象的脚本绑定,记录最大的脚本绑定层数
2.查找对象的分布层数,建立树形层级
3.对于加载过程,从脚本层数开始的最底端开始遍历整个对象分布的树形层
4.对于销毁过程,则反过来由对象视图的树形层开始,依然销毁对象的脚本,并且优先销毁最底层的父节点,依次向上!
仅为记录工作中的一些疑问,有不对的地方,欢迎大家指正,交流!谢谢理解!
相关文章推荐
- Unity对象实例的执行顺序探究及一个对象关联多个脚本的
- 【黑马程序员】关于多线程聊天室中出现的“由于其他线程拥有此对象,因此调用线程无法对其进行访问”问题的探究
- Unity3D中关于场景销毁时事件调用顺序的一点记录
- 关于Unity3D 的脚本的执行顺序
- 关于Unity3D脚本中UIEventListener无法调用的问题
- 关于基类指针指向子类对象,构造函数和析构函数调用的顺序的问题。
- 字节码加载和class实例(静态成员变量对象加载顺序)
- 关于View的onMeasure()、onSizeChanged()、onLayout()、onDraw()调用顺序
- 关于try-catch语段中,try内的语句执行顺序的探究
- 关于构造函数的调用顺序
- 关于js中,原型对象,原型链,构造函数,实例之间关系的理解与区别
- Unity3D中脚本的执行顺序和编译顺序
- Unity3D脚本:Unity3D调用外部摄像头
- 关于UrlHttpConnection.setRequestProperty()的调用顺序问题的验证
- 关于静态变量,静态代码块,实例变量,实例代码块,构造函数的执行顺序
- 实例化一个对象(类加载)的执行顺序详解
- JAVA学习日志 关于调用方法、生成对象的例子。还是用数字卦程序修改
- 关于C++中构造函数的调用顺序
- unity3D 5 学习 脚本文件拖拽进对象报错原因分析
- java对象实例初始化顺序