通过向量的方式计算,相对于本身的方向。可以延伸出碰撞角度计算等。
Unity.Physics性能警告,慎用。
使用场景:自己决定。
enum DirEnum
{
None,
Right,
Left,
Top,
Bottom,
Front,
Back
}
// private void OnTriggerEnter(Collider other)
// {
// Debug.Log($"OnTriggerEnter,{other.transform.name}");
// JudgeColliderDir(other);
// }
private void OnCollisionEnter(Collision other)
{
Debug.Log($"OnCollisionEnter,{other.transform.name}");
JudgeCollisionDir(other);
}
enum DirEnum
{
None,
Right,
Left,
Top,
Bottom,
Front,
Back
}
/// <summary>
/// 判断触发的方向
/// </summary>
DirEnum JudgeColliderDir(Collider other)
{
DirEnum dirEnum=DirEnum.None;
Vector3 transPos = transform.position;
Vector3 closePos = other.ClosestPointOnBounds(transPos);
Vector3 dir = (transPos-closePos).normalized;
if (dir.x>=1)
{
dirEnum = DirEnum.Right;
}
if (dir.x<=-1)
{
dirEnum = DirEnum.Left;
}
if (dir.y>=1)
{
dirEnum = DirEnum.Bottom;
}
if (dir.y<=-1)
{
dirEnum = DirEnum.Top;
}
if (dir.z>=1)
{
dirEnum = DirEnum.Front;
}
if (dir.z<=-1)
{
dirEnum = DirEnum.Back;
}
return dirEnum;
}
/// <summary>
/// 判断碰撞的方向
/// </summary>
DirEnum JudgeCollisionDir(Collision other)
{
DirEnum dirEnum=DirEnum.None;
Vector3 dir = other.contacts[0].normal;
if (dir.x>=1)
{
dirEnum = DirEnum.Right;
}
if (dir.x<=-1)
{
dirEnum = DirEnum.Left;
}
if (dir.y>=1)
{
dirEnum = DirEnum.Bottom;
}
if (dir.y<=-1)
{
dirEnum = DirEnum.Top;
}
if (dir.z>=1)
{
dirEnum = DirEnum.Front;
}
if (dir.z<=-1)
{
dirEnum = DirEnum.Back;
}
return dirEnum;
}