想要在与障碍物碰撞后停止移动玩家对象

问题描述

我是 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 以响应碰撞。

来源:Unity documentation