基本上如果玩家面前发生碰撞,它就不应该继续前进,但无论如何,玩家都会前进。
if (Input.GetAxis("Vertical") > 0 &&
!(Physics.Raycast(PlayerObject.transform.position,
Vector3.forward,
PlayerObject.collider.collider.bounds.size.z * 1.05f)))
{
PlayerObject.transform.Translate(Vector3.forward * MoveSpeed * Time.deltaTime);
}
答案 0 :(得分:1)
这里的问题是你使用物理学执行Raycast
,所以任何未启用物理学的东西都不会出现。您还使用Vector3.Forward
代替PlayerObject.transform.forward
,因此您获得了全局转发(0,0,1)
而不是播放器的实际向量。此外,但是使用玩家的位置,它不会注意到,例如,低矮或高悬的墙。
请注意,还有内置的CharacterController
组件来处理这种行为,以及智能处理Ramps和Steps。