我有一个字符(随键盘的箭头移动)。我的房子里有几堵墙。
事实是,当我撞到墙壁时,我想检测碰撞(因此它不会通过)。没关系。但是现在,当我的角色撞墙时,他会做一些奇怪的事情,就像在重力模式下一样,他独自一人移动(我不知道是否可以理解)。
所以,我想当我撞墙时,角色停止移动吗?我已经尝试了很多事情,但是我有点迷失了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);
}
}
}
如切斯特拉在评论中所述:
在onCollisionEnter()
中将刚体设置为运动学,在onCollisionExit()
中将其设置为动力学。
从Unity文档中,“如果启用了isKinematic,则力,碰撞或关节将不再影响刚体。”
https://docs.unity3d.com/ScriptReference/Rigidbody-isKinematic.html