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; } /// /// 根据目标点获取碰撞体的8点世界坐标 /// /// 目标点 /// 目标身上的碰撞体 /// 碰撞体的8点世界坐标 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)); } }