95 lines
4.2 KiB
C#
95 lines
4.2 KiB
C#
using UnityEngine;
|
|
|
|
public static class VectorUtils
|
|
{
|
|
public static Vector3 LocalPointToWorldPos(Transform tr, Vector3 localPoint)
|
|
{
|
|
return tr.TransformPoint(localPoint);
|
|
}
|
|
|
|
public static Vector3[] GetBoxColliderVertexPositions(BoxCollider boxcollider)
|
|
{
|
|
|
|
var vertices = new Vector3[8];
|
|
//下面4个点
|
|
vertices[0] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
|
|
vertices[1] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
|
|
vertices[2] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
|
|
vertices[3] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
|
|
//上面4个点
|
|
vertices[4] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
|
|
vertices[5] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(-boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
|
|
vertices[6] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(-boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
|
|
vertices[7] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
|
|
|
|
return vertices;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据目标点获取碰撞体的8点世界坐标
|
|
/// </summary>
|
|
/// <param name="target">目标点</param>
|
|
/// <param name="boxcollider">目标身上的碰撞体</param>
|
|
/// <returns>碰撞体的8点世界坐标</returns>
|
|
public static Vector3[] GetBoxColliderVertexPositions(Vector3 target, BoxCollider boxcollider)
|
|
{
|
|
Vector3 center = target + boxcollider.center;
|
|
var vertices = new Vector3[8];
|
|
//下面4个点
|
|
vertices[0] = center + new Vector3(boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f;
|
|
vertices[1] = center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f;
|
|
vertices[2] = center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f;
|
|
vertices[3] = center + new Vector3(boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f;
|
|
//上面4个点
|
|
vertices[4] = center + new Vector3(boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f;
|
|
vertices[5] = center + new Vector3(-boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f;
|
|
vertices[6] = center + new Vector3(-boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f;
|
|
vertices[7] = center + new Vector3(boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f;
|
|
|
|
return vertices;
|
|
}
|
|
|
|
public static Vector3 OutputInpectorEulers(Transform transform)
|
|
{
|
|
Vector3 angle = transform.eulerAngles;
|
|
float x = angle.x;
|
|
float y = angle.y;
|
|
float z = angle.z;
|
|
|
|
if (Vector3.Dot(transform.up, Vector3.up) >= 0f)
|
|
{
|
|
if (angle.x >= 0f && angle.x <= 90f)
|
|
{
|
|
x = angle.x;
|
|
}
|
|
if (angle.x >= 270f && angle.x <= 360f)
|
|
{
|
|
x = angle.x - 360f;
|
|
}
|
|
}
|
|
if (Vector3.Dot(transform.up, Vector3.up) < 0f)
|
|
{
|
|
if (angle.x >= 0f && angle.x <= 90f)
|
|
{
|
|
x = 180 - angle.x;
|
|
}
|
|
if (angle.x >= 270f && angle.x <= 360f)
|
|
{
|
|
x = 180 - angle.x;
|
|
}
|
|
}
|
|
|
|
if (angle.y > 180)
|
|
{
|
|
y = angle.y - 360f;
|
|
}
|
|
|
|
if (angle.z > 180)
|
|
{
|
|
z = angle.z - 360f;
|
|
}
|
|
return new Vector3(x, y, z);
|
|
//LogError(" Inspector Euler: " + Mathf.Round(x) + " , " + Mathf.Round(y) + " , " + Mathf.Round(z));
|
|
}
|
|
}
|