博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D 关于yield在collider中的使用
阅读量:4681 次
发布时间:2019-06-09

本文共 938 字,大约阅读时间需要 3 分钟。

今天朋友在写三个触发器简单协作的应用,但是无论怎样都达不到预期的效果,其中大概有一句代码如下:

function OnColliderStay (other :Collider){    //停下来    other.getComponent(Move).direction = Vector3.zero ;    //等待两秒钟    yield WaitForSeconds(2);    //恢复运动    other.getComponent(Move).direction = Vector3.forward ;}

然后下一个触发器有一个停下来并且转向的动作,大概代码如下:

function OnColliderEnter (other :Collider){    //停下来    other.GetComponent(Move).direction = Vector3.zero ;    //等待1秒    yeild WaitForSeconds(1);    //转向,希望在转的方向上继续运动    other.GetComponent(Move).direction = Vector3.left ;    //恢复速度希望在方向上移动}

通过以上代码,结果无论怎样都不能按照期望的那样转向运动。其实敏感的朋友看到第一段代码就应该有感觉了,它一定是问题代码,而且严重!!!

 

问题分析及解决

其实在上面第一段代码中,OnColliderStay片段会每帧都执行,在里面写yeild实际上是不允许的,就像不允许在Update、FixedUpdate中写一样,奇怪的是为什么编译器禁止后面两种,却允许了前面那种写法!它的执行过程不好分析,但运动出来的时候一定是还有一个yeild在等待,也就是两秒后它会重置方向。这可能导致下面一段代码中的方向重置失效!

 

结论

一定不要在OnColliderStay, OnTriggerStay, Update, FixedUpdate以一定频率循环执行的方法中添加yeild !

转载于:https://www.cnblogs.com/huntdream/archive/2013/04/24/3041429.html

你可能感兴趣的文章
Theano 学习笔记(一)
查看>>
spring 集成shiro 之 自定义过滤器
查看>>
Mono Libgdiplus库
查看>>
c语言基础知识要点
查看>>
node启动时, listen EADDRINUSE 报错;
查看>>
杭电3466————DP之01背包(对状态转移方程的更新理解)
查看>>
昨天用的流量有点多60M
查看>>
kafka中的消费组
查看>>
Golang的channel使用以及并发同步技巧
查看>>
【JDK源码分析】 String.join()方法解析
查看>>
【SICP练习】112 练习3.28
查看>>
python--注释
查看>>
前端资源链接 ...
查看>>
yum install ntp 报错:Error: Package: ntp-4.2.6p5-25.el7.centos.2.x86_64 (base)
查看>>
leetcode-Single Number-136
查看>>
CF715C Digit Tree
查看>>
二分法练习1
查看>>
QT 制作串口调试小助手----(小白篇)
查看>>
前端MVC实践之hellorocket——by张舒彤
查看>>
OptimalSolution(2)--二叉树问题(3)Path路径问题
查看>>