using EZXR.Glass.Core; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace EZXR.Glass.Inputs { [RequireComponent(typeof(DrawBounds))] public class TransformWithBounds : MonoBehaviour { DrawBounds drawBounds; /// /// 缩放控制角的Prefab /// GameObject prefab_ScaleCorner; /// /// 8个角,用来控制缩放 /// Transform[] corners = new Transform[8]; /// /// 旋转握柄的Prefab /// GameObject prefab_RotateHandle; /// /// 用来控制沿X轴旋转的握柄 /// [HideInInspector] public Transform[] rotate_X = new Transform[4]; /// /// 水平方向4个Bound的中间点,用来控制水平旋转 /// [HideInInspector] public Transform[] rotate_Y = new Transform[4]; /// /// 用来控制沿Z轴旋转的握柄 /// [HideInInspector] public Transform[] rotate_Z = new Transform[4]; // Start is called before the first frame update void Start() { prefab_ScaleCorner = ResourcesManager.Load("TransformWithBounds/ScaleCorner"); prefab_RotateHandle = ResourcesManager.Load("TransformWithBounds/RotateHandle"); drawBounds = GetComponent(); //生成缩放控制角,并根据实例化的角的位置来设置为正确的旋转角度 corners[0] = Instantiate(prefab_ScaleCorner, drawBounds.vertices[0], Quaternion.identity, transform).transform; corners[0].localEulerAngles = new Vector3(0, -180, -90); corners[1] = Instantiate(prefab_ScaleCorner, drawBounds.vertices[1], Quaternion.identity, transform).transform; corners[1].localEulerAngles = new Vector3(0, -180, -180); corners[2] = Instantiate(prefab_ScaleCorner, drawBounds.vertices[2], Quaternion.identity, transform).transform; corners[2].localEulerAngles = new Vector3(0, 90, 0); corners[3] = Instantiate(prefab_ScaleCorner, drawBounds.vertices[3], Quaternion.identity, transform).transform; corners[3].localEulerAngles = new Vector3(0, 180, 0); corners[4] = Instantiate(prefab_ScaleCorner, drawBounds.vertices[4], Quaternion.identity, transform).transform; corners[4].localEulerAngles = new Vector3(0, 0, -180); corners[5] = Instantiate(prefab_ScaleCorner, drawBounds.vertices[5], Quaternion.identity, transform).transform; corners[5].localEulerAngles = new Vector3(90, 0, 0); corners[6] = Instantiate(prefab_ScaleCorner, drawBounds.vertices[6], Quaternion.identity, transform).transform; corners[6].localEulerAngles = new Vector3(0, 0, 0); corners[7] = Instantiate(prefab_ScaleCorner, drawBounds.vertices[7], Quaternion.identity, transform).transform; corners[7].localEulerAngles = new Vector3(0, -90, 0); //生成绕X轴旋转的控制杆 rotate_X[0] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[0], Quaternion.identity, transform).transform; rotate_X[1] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[2], Quaternion.identity, transform).transform; rotate_X[2] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[6], Quaternion.identity, transform).transform; rotate_X[3] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[4], Quaternion.identity, transform).transform; rotate_X[0].LookAt(drawBounds.vertices[0], transform.up); rotate_X[1].LookAt(drawBounds.vertices[2], transform.up); rotate_X[2].LookAt(drawBounds.vertices[6], transform.up); rotate_X[3].LookAt(drawBounds.vertices[4], transform.up); //生成绕Y轴旋转的控制杆 rotate_Y[0] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[1], Quaternion.identity, transform).transform; rotate_Y[1] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[3], Quaternion.identity, transform).transform; rotate_Y[2] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[7], Quaternion.identity, transform).transform; rotate_Y[3] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[5], Quaternion.identity, transform).transform; rotate_Y[0].LookAt(drawBounds.vertices[1], transform.forward); rotate_Y[1].LookAt(drawBounds.vertices[3], transform.forward); rotate_Y[2].LookAt(drawBounds.vertices[7], transform.forward); rotate_Y[3].LookAt(drawBounds.vertices[5], transform.forward); //生成绕Z轴旋转的控制杆 rotate_Z[0] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[8], Quaternion.identity, transform).transform; rotate_Z[1] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[9], Quaternion.identity, transform).transform; rotate_Z[2] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[10], Quaternion.identity, transform).transform; rotate_Z[3] = Instantiate(prefab_RotateHandle, drawBounds.midPoints[11], Quaternion.identity, transform).transform; rotate_Z[0].LookAt(drawBounds.vertices[0], transform.up); rotate_Z[1].LookAt(drawBounds.vertices[1], transform.up); rotate_Z[2].LookAt(drawBounds.vertices[2], transform.up); rotate_Z[3].LookAt(drawBounds.vertices[3], transform.up); } // Update is called once per frame void Update() { } } }