54 lines
1.9 KiB
C#
54 lines
1.9 KiB
C#
|
|
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;
|
|||
|
|
}
|
|||
|
|
}
|