【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还少
- 【Unity教程】游戏系统主线程控制--快速精确查找子物体
- c#子线程调用主线程控件
- 子线程访问 主线程控件
- Unity根据名称递归查找一个物体的子物体
- C#多线程同步以及子线程调用主线程控件
- unity深度查找某个子物体和遍历所有子物体方法
- 如何用通过C++11提供的std::condition_variable实现主线程控制子线程的启动和停止
- unity 删除子物体
- 查找子物体
- 游戏中实现物体的精确选择
- 游戏中实现物体的精确选择
- 游戏中实现物体的精确选择
- 【Unity】子物体坐标问题
- Unity教程之-Unity游戏技能Skill系统架构设计
- Unity子线程与主线程通信
- 递归查找子物体/获取子物体上组件
- unity 查找物体各种方法性能比较
- unity中查找物体的方法
- 结对测试工具PICT用户手册(6)——警告消息
- java之旅之I/O流
- Android应用程序------精算达人
- 中断
- eclipse launching workspace太慢的解决方法
- 【Unity教程】游戏系统主线程控制--快速精确查找子物体
- 第5次作业
- 条款三十四:如何在同一个程序中结合C++和C
- 任务管理
- 在Spring Boot中输出REST资源
- 苹果手机网页上点击数字可能拨打电话的解决办法
- spring mvc:expected at least 1 bean which qualifies as autowire candidate for this depende
- “浅拷贝”与“深拷贝”
- java实现动态优先权算法