【Unity教程】游戏系统主线程控制--快速精确查找子物体

来源:互联网 发布:java web 许令波 编辑:程序博客网 时间:2024/05/22 03:02

本篇文章实现了: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>();
        //调用test1的私有函数GOtest2,把test2现在所挂的物体PersonBodyManage给予test1的GOtest2函数的形参
        test1Var.GOtest2(this);

test1中执行下面一句话,只用了1ms


        test2T1VAR.show();//在test1脚本中使用test2的show函数


-------------------------------------------------------------------------------------------------------------------

test1函数查找test2脚本所在的对象,是否快些

把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还少

0 0
原创粉丝点击