97 lines
2.5 KiB
C#
97 lines
2.5 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// ÔÚ·µ»Ø²¢ÖØÐÂÑ¡ÔñÎïÌåʱµ÷Óã¬ÖØÖÃÊäÈë״̬
|
|
/// </summary>
|
|
public void ResetInputState()
|
|
{
|
|
isRotating = false;
|
|
isDragging = false;
|
|
lastMouseX = Input.mousePosition.x;
|
|
lastMouseY = Input.mousePosition.y;
|
|
}
|
|
}
|