碰撞统一后角色错误动作

Character wrong action after collision unity

我有一个角色(用键盘的箭头移动)。我家有好几堵墙。

问题是,我想在撞墙时检测碰撞(这样它就不会通过)。没关系。但是现在,当我的角色撞墙时,他会做一些奇怪的事情,他会像在重力模式下一样独自移动(我不知道是否可以理解)。

所以,我想,当我撞到墙上时,角色会停止移动吗?我已经尝试了很多东西,但我有点迷路了,所以如果你有任何想法,我会接受并尝试!仅作记录,几个月前开始使用 unity,所以我的脚本中可能存在错误(我的意思是,它编译但可能不是最好的编写方式)。

这是我的脚本:

public class ScriptCharacter : MonoBehaviour
{
private Animator m_animator;
private Rigidbody m_rigidBody;
private void Start()
{
    m_animator = gameObject.GetComponent<Animator>();
    m_animator.SetFloat("Speed", 1);

}

// Update is called once per frame
private void FixedUpdate()
{
    float v = Input.GetAxis("Vertical");
    float h = Input.GetAxis("Horizontal");
    transform.Translate(transform.forward * v * Time.deltaTime, Space.World);
    transform.Rotate(0, h * Time.deltaTime * 30, 0);
    m_animator.SetFloat("Speed", v);
}
void OnCollisionEnter(Collision collision)
{
    Debug.Log("here");
    if (collision.gameObject.name == "Wall")  
    {
        m_rigidBody.velocity = Vector3.zero;
        m_rigidBody.angularVelocity = Vector3.zero;
        m_animator.SetFloat("Speed", 0);
    }
}


}

正如 Chestera 在评论中提到的:

onCollisionEnter() 中将刚体设置为运动学并在 onCollisionExit() 中将其设置回动态。

来自 Unity 文档,"If isKinematic is enabled, Forces, collisions or joints will not affect the rigidbody anymore."

https://docs.unity3d.com/ScriptReference/Rigidbody-isKinematic.html