Unity3D教程:模拟物理碰撞反弹
发表于2017-01-23
一些游戏会要模拟物理碰撞反弹效果,可能有些游戏开发者因为不熟悉还不知道如何去处理,为此,下面就给大家介绍下Unity3D中的模拟物理碰撞反弹效果,一起来看看吧。
根据入射方向得到反射方向,并保留相同速率。下面是代码的实现方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | private Vector3 m_preVelocity = Vector3.zero; //上一帧速度 public void OnCollisionEnter(Collision collision) { if (collision.gameObject.name == "wall" ) { ContactPoint contactPoint = collision.contacts[0]; Vector3 newDir = Vector3.zero; Vector3 curDir = transform.TransformDirection(Vector3.forward); newDir = Vector3.Reflect(curDir, contactPoint.normal); Quaternion rotation = Quaternion.FromToRotation(Vector3.forward, newDir); transform.rotation = rotation; rigidbody.velocity = newDir.normalized * m_preVelocity.x / m_preVelocity.normalized.x; } } |