using UnityEngine; public class RotateAndScale : MonoBehaviour { [Header("旋转设置")] public float rotationSpeed = 0.2f; // 旋转速度 private bool isRotating = false; private float lastMouseX; [Header("拖拽设置")] public float dragSpeed = 0.1f; private bool isDragging = false; private float lastMouseY; [Header("缩放设置")] public float scaleSpeed = 0.5f; // 缩放速度 public float minScale = 0.1f; // 最小缩放 private void Update() { HandleRotation(); HandleDragging(); HandleScaling(); } private void HandleRotation() { if (Input.GetMouseButtonDown(0)) { isRotating = true; lastMouseX = Input.mousePosition.x; } if (Input.GetMouseButtonUp(0)) { isRotating = false; } if (isRotating) { float deltaX = Input.mousePosition.x - lastMouseX; transform.Rotate(0f, -deltaX * rotationSpeed, 0f, Space.World); lastMouseX = Input.mousePosition.x; } } private void HandleDragging() { if (Input.GetMouseButtonDown(1)) { isDragging = true; lastMouseX = Input.mousePosition.x; lastMouseY = Input.mousePosition.y; } if (Input.GetMouseButtonUp(1)) { isDragging = false; } if (isDragging) { float deltaX = Input.mousePosition.x - lastMouseX; float deltaY = Input.mousePosition.y - lastMouseY; transform.Translate(new Vector3(deltaX, deltaY, 0f) * dragSpeed, Space.World); lastMouseX = Input.mousePosition.x; lastMouseY = Input.mousePosition.y; } } private void HandleScaling() { float scroll = Input.mouseScrollDelta.y; if (Mathf.Abs(scroll) > 0f) { Vector3 newScale = transform.localScale + Vector3.one * scroll * scaleSpeed; newScale.x = Mathf.Max(newScale.x, minScale); newScale.y = Mathf.Max(newScale.y, minScale); newScale.z = Mathf.Max(newScale.z, minScale); transform.localScale = newScale; } } /// /// 在返回并重新选择物体时调用,重置输入状态 /// public void ResetInputState() { isRotating = false; isDragging = false; lastMouseX = Input.mousePosition.x; lastMouseY = Input.mousePosition.y; } }