95 lines
4.2 KiB
C#
Raw Permalink Normal View History

2025-06-07 17:43:34 +08:00
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));
}
}