本篇文章实现了:test1脚本为Unity游戏控制管理的主线程,test2脚本是子物体的脚本
当游戏程序大量生成物体的时候,使用Find函数,或者是FindWithTag函数,大量查找的时候,
效率会变慢,那么直接把test2的物体告诉test1物体,就可以快速查找到子物体,并在test1中调用test2脚本物体的函数
当设置一个bool布尔变量控制这个物体,就可以实现快速精确查找
大概就是要实现如下的目标(不知道接口是不是这个意思)
(玩家物体射出射线检测后,捕捉到最近的B脚本敌人,则调用 最近的B脚本敌人 的脚本B,使其bool布尔变量改变,
并且调用B脚本的相关函数,使得敌人开始冲锋技能)
test1脚本和test2脚本挂载了物体,才能运行
给每个对象都有update()函数调用,那么线程当中就会混乱,影响程序运行的时间
使用主线程(不知道这算不算是线程控制)避免不必要的脚本冗余运行
脚本A,Test1.cs为游戏主线程,控制游戏运行,也就是只有一个Update(),在这个脚本A中
脚本B是要运行的脚本,把B给A,使得A能够调用B的函数B
(在Test1.cs脚本中,只用定义和test2.cs类文件一样的函数就行了,不必调用find函数
这样就像是C++的指针,指针直接指向目标对象,而不是依靠指针对每一个对象进行查找)
(GameObjectManage总是在Hierarchy视图的最前面,因此使用Find函数应该是最快的)
【每个脚本中的this对象都是指向自身的,test2.cs里面的this则是指向自己test2.cs】
----------------------开始测试Unity调用程序的时间
------------------------
-------------------------------
一种情况,在test2中直接调用show函数
另一种情况,在test1.cs中调用test2.cs的show函数
这两种情况分别调用test2.cs的show函数,使用时间一样
---------------------------------------------------------
test2执行下面两句话,不到0ms
//找到物体GameObjectManage(Hierarchy视图中的对象物体)的组件脚本test1
test1Var = GameObject.Find("GameObjectManage").GetComponent
//调用test1的私有函数GOtest2,把test2现在所挂的物体PersonBodyManage给予test1的GOtest2函数的形参
test1Var.GOtest2(this);
test1中执行下面一句话,只用了1ms
test2T1VAR.show();//在test1脚本中使用test2的show函数
-------------------------------------------------------------------------------------------------------------------
把test2.cs函数都注释了,只留下show函数
显然test1使用find方法调用test2的show函数,耗时3ms
把test1注释掉,只调用test2的show函数,发现耗时3ms
------------------------------------
使用我的方法,总调用时间最多2ms,
---------------------------------------------
做了个测试,在update函数里面,只留下下面几句代码
sw.Start();
test2T1VAR.show();//在test1脚本中使用test2的show函数
sw.Stop();
UnityEngine.Debug.Log(string.Format("time test1 find test2.show : {0} ms", sw.ElapsedMilliseconds));
发现,显示出来的时间都是调用的累积时间
------------------------------------
那么问题来了,为什么test2脚本只有show函数的时候,耗时3ms
而使用我的方法的时候,为什么test2脚本调用自己的函数show的时候,耗时更少,只有1ms
而当test1获得test2的对象的时候,test1再调用test2的show函数的时候,耗时比1ms还少