Unity3D 关于yield在collider中的使用
2013-04-24 23:43
393 查看
今天朋友在写三个触发器简单协作的应用,但是无论怎样都达不到预期的效果,其中大概有一句代码如下:
然后下一个触发器有一个停下来并且转向的动作,大概代码如下:
通过以上代码,结果无论怎样都不能按照期望的那样转向运动。其实敏感的朋友看到第一段代码就应该有感觉了,它一定是问题代码,而且严重!!!
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 !相关文章推荐
- Unity3D 关于Coroutine(协程)使用的研究笔记及关于yield的理解
- 关于unity3D的GL图像库的使用
- 关于Unity3D使用LitJson报错问题
- 关于Unity3D协程的使用
- 关于Unity3d 使用rigidbody.velocity代替Transform.Translate()来使物体向前移动
- 关于unity3d播放flash动画,使用插件uniswf
- 关于unity中使用yield return newWaitForSeconds()后面语句不执行
- 关于Unity3d中的LayerMask使用
- Python yield 使用浅析,关于generator的详解
- unity3d开发2d游戏关于Assetbundle的使用
- Unity3D-关于使用LayoutGroup自动布局后获取宽高不对的问题
- unity3D 关于重新载入场景后Easytouch不能使用的问题
- 关于在Unity3D中使用Kinect的一些研究
- Unity3d 关于碰撞事件触发,触发器事件触发和 RigidBody以及IsKinematic RigidBody,Collider以及IsTrigger Collider 的条件总结
- 关于Unity3D中的UnitySendMessage方法的使用!!!
- 关于Unity3D中的UnitySendMessage方法的使用!!!
- Unity3D游戏设计之旅--页面篇:NGUI使用(二)关于系统通知设计的理念
- Unity3D中Rigidbody组件和Collider组件的使用
- Unity3D关于刚体(RigidBody)与碰撞体(Collider)的探索(二)
- 关于unity3d发布webgl使用nodejs做服务器的实践