问题描述
我是 Unity 的新手,现在我在 Unity 中遇到了碰撞。我正在尝试,当我的播放器对象(正在移动)碰到障碍物时,它会停止移动。然而,搜索了这么多教程,我什么也找不到。
using UnityEngine;
public class PlayerCollision : MonoBehavIoUr
{
void OnCollisionEnter(Collision collision)
{
Debug.Log("WE HIT AN OBSTACLE");
}
}
我在我的 Player 对象中添加了这段代码并运行了它,但控制台中没有任何内容。我应该做哪些改变?
解决方法
如果您添加一个脚本来移动您的玩家,您可以在发生碰撞时禁用该脚本。
假设我们有脚本 PlayerMovement
。
public PlayerMovement playerMovement;
void OnCollisionEnter(Collision collision)
{
playerMovement.enabled = false;
}
在这种情况下,您应该在 Unity 中分配 PlayerMovement
组件。
在另一种情况下,您可以在脚本中获取 PlayerMovement
组件:
void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag.Contains("Player")
collision.gameObject.GetComponent<PlayerMovement>().enabled = true;
}
,
OnCollisionEnter
当这个碰撞器/刚体开始接触另一个刚体/碰撞器时被调用。
与 OnTriggerEnter 相比,OnCollisionEnter 传递的是 Collision 类而不是 Collider。 Collision 类包含有关接触点和撞击速度等信息。 注意:仅当其中一个碰撞器还附加了非运动学刚体时才会发送碰撞事件。碰撞事件将发送到禁用的 MonoBehaviours,以允许启用 Behaviors 以响应碰撞。