我正在使用光线投射来获得碰撞。我的玩家可以向各个方向(北、东、南、西)一次移动一步,但如果有障碍物挡道,它就不会移动。作为参考,它与 Crossy Road 游戏类似。
障碍物检测有时会起作用,但有时它不会发现任何碰撞,玩家会踩到障碍物。
我将 RigidBody 和 Collider 附加到玩家上,并且仅在障碍物上进行碰撞。
代码:
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);
}
}
}
在您的
if
语句中,您有三个或(||),这意味着如果从左侧开始的三个或(||)之一返回 true ,则无需检查其余部分,因为整个语句都是 true ,所以让我们假设 (Physics.Raycast(MidRay , Vector3.forward,out hit,2f))
是true 并且它的 hit.collider.tag
不是 obs
所以它不会检查其他的,如果你的答案在 leftRay 中,它永远不会被检查