using System; using UnityEngine; [AddComponentMenu("NGUI/Interaction/Drag-Resize Widget")] public class UIDragResize : MonoBehaviour { private void OnDragStart() { if (this.target != null) { Vector3[] worldCorners = this.target.worldCorners; this.mPlane = new Plane(worldCorners[0], worldCorners[1], worldCorners[3]); Ray currentRay = UICamera.currentRay; float distance; if (this.mPlane.Raycast(currentRay, out distance)) { this.mRayPos = currentRay.GetPoint(distance); this.mLocalPos = this.target.cachedTransform.localPosition; this.mWidth = this.target.width; this.mHeight = this.target.height; this.mDragging = true; } } } private void OnDrag(Vector2 delta) { if (this.mDragging && this.target != null) { Ray currentRay = UICamera.currentRay; float distance; if (this.mPlane.Raycast(currentRay, out distance)) { Transform cachedTransform = this.target.cachedTransform; cachedTransform.localPosition = this.mLocalPos; this.target.width = this.mWidth; this.target.height = this.mHeight; Vector3 b = currentRay.GetPoint(distance) - this.mRayPos; cachedTransform.position += b; Vector3 vector = Quaternion.Inverse(cachedTransform.localRotation) * (cachedTransform.localPosition - this.mLocalPos); cachedTransform.localPosition = this.mLocalPos; NGUIMath.ResizeWidget(this.target, this.pivot, vector.x, vector.y, this.minWidth, this.minHeight, this.maxWidth, this.maxHeight); } } } private void OnDragEnd() { this.mDragging = false; } public UIWidget target; public UIWidget.Pivot pivot = UIWidget.Pivot.BottomRight; public int minWidth = 100; public int minHeight = 100; public int maxWidth = 100000; public int maxHeight = 100000; private Plane mPlane; private Vector3 mRayPos; private Vector3 mLocalPos; private int mWidth; private int mHeight; private bool mDragging; }