using UnityEngine;
namespace GameMain
{
public class ModelControl : MonoBehaviour
{
private bool _isMouseDown = false;
private bool _isRightMouseDown = false;
private Vector3 _startPos;
private float _scrollValue;
private Vector3 _modelToCameraDelta;
private const float RotateSpeed = 15f;
private const float MoveSpeed = 0.1f;
[SerializeField] private Transform targetModel;
[SerializeField] private Transform modelCamera;
private void Update()
{
if (null == targetModel)
{
return;
}
if (Input.GetMouseButtonDown(0))
{
_startPos = Input.mousePosition;
_isMouseDown = true;
}
if (Input.GetMouseButtonUp(0))
{
_isMouseDown = false;
}
if (Input.GetMouseButtonDown(1))
{
_startPos = Input.mousePosition;
_isRightMouseDown = true;
}
if (Input.GetMouseButtonUp(1))
{
_isRightMouseDown = false;
}
_scrollValue = Input.GetAxis("Mouse ScrollWheel");
if (_scrollValue == 0) return;
_modelToCameraDelta = (modelCamera.position - targetModel.position).normalized;
targetModel.Translate(_modelToCameraDelta * (_scrollValue * MoveSpeed * 1000 * Time.deltaTime),Space.World);
}
private void FixedUpdate()
{
if (_isMouseDown)
{
var currentPos = Input.mousePosition;
var delta = currentPos - _startPos;
var rotationAxis = Vector3.Cross(delta, Vector3.forward).normalized;
var rotateAmount = delta.magnitude * RotateSpeed * Time.fixedDeltaTime;
targetModel.Rotate(rotationAxis, rotateAmount, Space.World);
_startPos = currentPos;
}
if (_isRightMouseDown)
{
var currentPos = Input.mousePosition;
var delta = currentPos - _startPos;
var moveAmount = delta * (MoveSpeed * Time.fixedDeltaTime);
targetModel.position += moveAmount;
_startPos = currentPos;
}
}
}
}
鼠标控制物体位移与旋转
于 2024-04-23 14:35:17 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)