# 判断Unity 物理碰撞的方向，包含Trigger触发的方向

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;
}
``````

THE END