通过向量的方式计算,相对于本身的方向。可以延伸出碰撞角度计算等。 Unity.Physics性能警告,慎用。 使用场景:自己决定。
enum DirEnum
{
None,
Right,
Left,
Top,
Bottom,
Front,
Back
}
private void OnCollisionEnter(Collision other)
{
Debug.Log($"OnCollisionEnter,{other.transform.name}");
JudgeCollisionDir(other);
}
enum DirEnum
{
None,
Right,
Left,
Top,
Bottom,
Front,
Back
}
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;
}
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;
}
|