Unity3d 碰撞统一后的角色错误行为

Unity3d 碰撞统一后的角色错误行为,unity3d,collision,rigid-bodies,Unity3d,Collision,Rigid Bodies,我有一个字符(用键盘的箭头移动)。我的房子有几面墙 问题是,我想在我撞到墙上时检测碰撞(这样它就不会通过)。没关系。但现在,当我的角色碰到墙时,他会做一些奇怪的事情,他会像在重力模式下一样独自移动(我不知道是否可以理解) 所以,我想,当我碰到墙时,角色停止移动?我试过很多东西,我有点丢了自动取款机,所以如果你有任何想法,我会拿它试试!为了记录在案,几个月前开始使用unity,所以我的脚本中可能会有错误(我的意思是,它可以编译,但可能不是用最好的方式编写的) 这是我的剧本: public clas

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

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

所以,我想,当我碰到墙时,角色停止移动?我试过很多东西,我有点丢了自动取款机,所以如果你有任何想法,我会拿它试试!为了记录在案,几个月前开始使用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);
    }
}


}
公共类ScriptCharacter:MonoBehavior
{
私人动画师m_Animator;
私人刚体m_刚体;
私有void Start()
{
m_animator=gameObject.GetComponent();
m_animator.SetFloat(“速度”,1);
}
//每帧调用一次更新
私有void FixedUpdate()
{
浮点v=输入。GetAxis(“垂直”);
float h=输入。GetAxis(“水平”);
transform.Translate(transform.forward*v*Time.deltaTime,Space.World);
transform.Rotate(0,h*Time.deltaTime*30,0);
m_animator.SetFloat(“速度”,v);
}
无效碰撞中心(碰撞)
{
Debug.Log(“此处”);
如果(collision.gameObject.name==“墙”)
{
m_刚体速度=矢量3.0;
m_刚体。角速度=矢量3.0;
m_animator.SetFloat(“速度”,0);
}
}
}

正如Chestera在评论中提到的:

OnCollisionCenter()
中将刚体设置为运动学,并在
onCollisionExit()中将其设置回动力学

在Unity文档中,“如果启用IsKinetic,力、碰撞或关节将不再影响刚体。”


我试过了,也冻结了旋转轴,效果很好!非常感谢。