protected void generateLocalCorners(GameObject parent, bool includeRotation = false) { RectTransform rectTransform = GetComponent <RectTransform>(); // 去除旋转 Quaternion lastQuat = rectTransform.rotation; if (!includeRotation) { rectTransform.rotation = Quaternion.identity; } Vector2 size = rectTransform.rect.size; mLocalCorners[0] = new Vector3(-size.x * 0.5f, -size.y * 0.5f); mLocalCorners[1] = new Vector3(-size.x * 0.5f, size.y * 0.5f); mLocalCorners[2] = new Vector3(size.x * 0.5f, size.y * 0.5f); mLocalCorners[3] = new Vector3(size.x * 0.5f, -size.y * 0.5f); for (int i = 0; i < 4; ++i) { Vector3 worldCorner = UnityUtility.localToWorld(rectTransform, mLocalCorners[i]); mLocalCorners[i] = UnityUtility.worldToLocal(parent.transform, worldCorner); } if (!includeRotation) { rectTransform.rotation = lastQuat; } }
public static Vector3 localToWorld(Transform transform, Vector3 local) { #if MAKE_CS_DLL return((Vector3)callStatic(UTILITY_UNITY, "localToWorld", new object[] { transform, local })); #else return(UnityUtility.localToWorld(transform, local)); #endif }