54 lines
1.9 KiB
C#
Raw Normal View History

2025-03-11 15:30:07 +08:00
using System.Collections;
using UnityEngine;
/**
* <EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תʱһ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><EFBFBD>Եġ<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>camera<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Rotate<EFBFBD>ĵ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>axisһ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>camera<EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>camera<EFBFBD><EFBFBD>up<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>camera<EFBFBD><EFBFBD>right<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
public class ModelRotate : MonoBehaviour
{
private Vector3 startPos;
private Quaternion startRot;
private Vector3 screenPoint;
private Vector3 offset;
private Camera mCamera;
public void Init(Camera c)
{
startPos = transform.localPosition;
startRot = transform.localRotation;
mCamera = c;
}
private void OnMouseDown()
{
if (mCamera == null) return;
screenPoint = mCamera.WorldToScreenPoint(transform.position);
offset = transform.position - mCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}
private void OnMouseDrag()
{
if (mCamera == null) return;
Vector3 curScreenPoint = new(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curWorldPoint = mCamera.ScreenToWorldPoint(curScreenPoint);
transform.position = curWorldPoint + offset;
}
private void Update()
{
RotateXY();
}
private void RotateXY()
{
if (Input.GetMouseButton(1))
{
Vector3 vaxis = Vector3.Cross(Vector3.forward, Vector3.right);
transform.Rotate(vaxis, Input.GetAxis("Mouse X") * 7, Space.World);
Vector3 haxis = Vector3.Cross(Vector3.forward, Vector3.up);
transform.Rotate(haxis, -Input.GetAxis("Mouse Y") * 7, Space.World);
}
}
public void ResetPosAndRot()
{
transform.localPosition = startPos;
transform.localRotation = startRot;
}
}