碰撞后的字符错误操作

问题描述 投票:1回答:1

我有一个字符(随键盘的箭头移动)。我的房子里有几堵墙。

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

所以,我想当我撞墙时,角色停止移动吗?我已经尝试了很多事情,但是我有点迷失了atm,因此,如果您有任何想法,我会接受并尝试!出于记录目的,几个月前开始使用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);
    }
}


}
unity3d collision rigid-bodies
1个回答
0
投票

如切斯特拉在评论中所述:

onCollisionEnter()中将刚体设置为运动学,在onCollisionExit()中将其设置为动力学。

从Unity文档中,“如果启用了isKinematic,则力,碰撞或关节将不再影响刚体。”

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

© www.soinside.com 2019 - 2024. All rights reserved.