RayCast 仅有时有效

问题描述 投票:0回答:1

我正在使用光线投射来获得碰撞。我的玩家可以向各个方向(北、东、南、西)一次移动一步,但如果有障碍物挡道,它就不会移动。作为参考,它与 Crossy Road 游戏类似。

障碍物检测有时会起作用,但有时它不会发现任何碰撞,玩家会踩到障碍物。

我将 RigidBody 和 Collider 附加到玩家上,并且仅在障碍物上进行碰撞。

Properties of player

代码:

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);
        }
    }
}
c# unity-game-engine collision-detection collision raycasting
1个回答
0
投票

在您的

if
语句中,您有三个或(||),这意味着如果从左侧开始的三个或(||)之一返回 true ,则无需检查其余部分,因为整个语句都是 true ,所以让我们假设
(Physics.Raycast(MidRay , Vector3.forward,out hit,2f))
是true 并且它的
hit.collider.tag
不是
obs
所以它不会检查其他的,如果你的答案在 leftRay 中,它永远不会被检查

© www.soinside.com 2019 - 2024. All rights reserved.