2025-03-17 17:27:32 +08:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
using UnityEngine.EventSystems;
|
|
|
|
|
|
|
|
|
|
public class ModelRotationHandler : MonoBehaviour, IPointerDownHandler, IDragHandler
|
|
|
|
|
{
|
|
|
|
|
public Transform modelTransform; // 需要旋转的3D模型的父节点
|
|
|
|
|
public float rotationSpeed = 5f; // 旋转速度
|
|
|
|
|
public float zoomSpeed = 20f; // 缩放速度
|
|
|
|
|
public float minZoom = -10f; // 最小缩放距离
|
|
|
|
|
public float maxZoom = -2f; // 最大缩放距离
|
|
|
|
|
|
|
|
|
|
public GameObject GameObject_r_y;
|
|
|
|
|
public GameObject GameObject_r_x;
|
|
|
|
|
public GameObject Camera_pos_z; // 需要缩放的相机对象
|
|
|
|
|
|
|
|
|
|
private Vector2 lastMousePosition; // 记录上一次鼠标位置
|
|
|
|
|
|
|
|
|
|
public void OnPointerDown(PointerEventData eventData)
|
|
|
|
|
{
|
|
|
|
|
lastMousePosition = eventData.position; // 记录鼠标初始位置
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void OnDrag(PointerEventData eventData)
|
|
|
|
|
{
|
|
|
|
|
if (modelTransform == null) return;
|
|
|
|
|
|
|
|
|
|
Vector2 delta = eventData.position - lastMousePosition; // 计算鼠标移动量
|
|
|
|
|
float rotationX = -delta.y * rotationSpeed * Time.deltaTime;
|
|
|
|
|
float rotationY = delta.x * rotationSpeed * Time.deltaTime;
|
|
|
|
|
|
|
|
|
|
GameObject_r_x.transform.Rotate(Vector3.up, rotationY, Space.World); // 水平旋转(左右拖动)
|
|
|
|
|
GameObject_r_y.transform.Rotate(Vector3.right, rotationX, Space.World); // 垂直旋转(上下拖动)
|
|
|
|
|
|
|
|
|
|
lastMousePosition = eventData.position; // 更新鼠标位置
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Update()
|
|
|
|
|
{
|
|
|
|
|
if (modelTransform == null) return;
|
|
|
|
|
|
|
|
|
|
GameObject_r_y.transform.position = modelTransform.position;
|
2025-03-22 14:59:41 +08:00
|
|
|
|
|
2025-03-17 17:27:32 +08:00
|
|
|
|
|
|
|
|
|
if (Camera_pos_z == null) return;
|
|
|
|
|
|
|
|
|
|
float scroll = Input.GetAxis("Mouse ScrollWheel");
|
|
|
|
|
if (scroll != 0f)
|
|
|
|
|
{
|
|
|
|
|
Vector3 targetPos = Camera_pos_z.transform.localPosition;
|
|
|
|
|
targetPos.z += scroll * zoomSpeed;
|
|
|
|
|
targetPos.z = Mathf.Clamp(targetPos.z, minZoom, maxZoom);
|
|
|
|
|
|
|
|
|
|
// 使用 Lerp 进行平滑缩放
|
|
|
|
|
Camera_pos_z.transform.localPosition = Vector3.Lerp(Camera_pos_z.transform.localPosition, targetPos, Time.deltaTime * 20f);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|