zoukankan      html  css  js  c++  java
  • Unity3D 关于yield在collider中的使用

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

    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 !

  • 相关阅读:
    docker registry
    2019最新EI源刊目录
    在Asp.net Core中使用中间件来管理websocket
    自定义WPF窗体形状
    Font Awesome矢量版,十六进制版,WPF字体使用
    什么是fortran语言之fortran语言入门
    Java各国首都列表
    世界各国货币,C#数字货币计算
    Ocelot中文文档入门
    F#语言入门之什么是F#语言
  • 原文地址:https://www.cnblogs.com/huntdream/p/3041429.html
Copyright © 2011-2022 走看看