【问题标题】:RayCast works only sometimesRayCast 仅在某些时候有效
【发布时间】:2015-10-04 01:18:09
【问题描述】:

我正在使用光线投射来进行碰撞。我的玩家可以一次向所有方向(北、东、南和西)移动,但如果有障碍物挡在路上,它就不会移动。如需更多间隙,请参阅 Crossy Road。

障碍物检测有时很好,但有时它不会发生任何碰撞并进入障碍物。

我有刚体和碰撞器连接到玩家,并且只碰撞障碍物。

代码:-

         if(Input.GetKeyUp(KeyCode.W))
         {
            PlayerScale = 1;
            this.transform.localScale = new Vector3 (1,PlayerScale,1);
            
            if((Physics.Raycast(MidRay , Vector3.forward,out hit,2f)) ||(Physics.Raycast(LeftRay , Vector3.forward,out hit,2f))||(Physics.Raycast(RightRay , Vector3.forward,out hit,2f)) )
            {
                if(hit.collider.tag == "Obs")
                {
                    Debug.Log("CantMove");
                }
                else
                {
                    Score +=1;
                    TargetPos = new Vector3(this.transform.position.x,this.transform.position.y,this.transform.position.z+MoveDist);

                }
            }
        }

【问题讨论】:

    标签: unity3d collision-detection collision unityscript raycasting


    【解决方案1】:

    在您的 if 语句中,您得到了三个 or(||) ,这意味着如果从左边开始的三个中的一个返回 true ,则无需检查其余部分,因为整个语句为 true ,因此假设 @987654322 @ 是真的,它的 hit.collider.tag 不是 obs 所以它不会检查其他人,如果你的答案在 leftRay 中,它将永远不会被检查

    【讨论】:

    • 我把它改成了一个条件,结果是一样的。
    • 你的意思是你写了4个If语句
    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2018-12-11
    • 2018-02-19
    • 2020-09-14
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多