Unity 碰撞角度问题
根据碰撞朝向弹出火花
当小球碰撞方块时根据碰撞方向产生火花
下面是简易版代码
private void OnCollisionEnter(Collision collision)
{
//拿到碰撞点
ContactPoint contact = collision.contacts[0];
//碰撞点的位置
Vector3 pos = contact.point;
//生成火花
GameObject go = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>("ConEff"));
//设置火花位置
go.gameObject.transform.position = pos;
//让火花朝向被撞的物体
go.transform.LookAt(collision.transform);
//把这个朝向反过来,就是火花溅射的正确方向
go.transform.rotation = Quaternion.Euler(go.transform.rotation.eulerAngles * -1);
}
根据碰撞法线弹出火花
目前还没想出来
//拿到碰撞点
ContactPoint contact = collision.contacts[0];
//碰撞点的位置
Vector3 pos = contact.point;
//碰撞点的法线
Vector3 nor = contact.normal;
在网上有看到别人用的,再此引用一下
原文地址:https://blog.csdn.net/wsc122181582/article/details/52790317/
根据入射方向得到反射方向,并保留相同速率
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;
}
}