Unity 场景鼠标移动、旋转

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class CameraMove : MonoBehaviour
{
    private Camera mainCamera;
    private Transform cameraTrans;
 
    private int xAxisCoefficient = 1;
    private int yAsixCoefficient = 1;
 
    private string _mouseXString = "Mouse X";
    private string _mouseYString = "Mouse Y";
    private string _mouseScrollWheel = "Mouse ScrollWheel";
    private Vector3 _currentMouseRotate = Vector3.zero;
 
    public float fieldOfViewMin = 20.0f;
    public float fieldOfviewMax = 100.0f;
    public float moveSpeed = 3;
    public float sensitivityDrag = 1;
    public float sensitivityRotate = 3;
    public float sensitivetyMouseWheel = 30;
 
    public bool xAxisinversion = false;
    public bool yAsixinversion = false;
 
    private void Start()
    {
        mainCamera = gameObject.GetComponent<Camera>();
        if (mainCamera == null)
        {
            return;
        }
        cameraTrans = mainCamera.transform;
 
        xAxisCoefficient = xAxisinversion ? -1 : 1;
        yAsixCoefficient = yAsixinversion ? -1 : 1;
    }
 
    private void Update()
    {
        if (cameraTrans == null) return;
 
        KeyBoardControl();
 
        MouseLeftDragControl();
 
        MouseRightRotateControl();
 
        MouseScrollwheelScale();
    }
 
    ///键盘控制移动
    private void KeyBoardMove()
    {
        if (Input.GetKey(KeyCode.W))
        {
            cameraTrans.Translate(Vector3.forward * Time.deltaTime * moveSpeed);
        }
 
        if (Input.GetKey(KeyCode.S))
        {
            cameraTrans.Translate(Vector3.back * Time.deltaTime * moveSpeed);
        }
 
        if (Input.GetKey(KeyCode.A))
        {
            cameraTrans.Translate(Vector3.left * Time.deltaTime * moveSpeed);
        }
 
        if (Input.GetKey(KeyCode.D))
        {
            cameraTrans.Translate(Vector3.right * Time.deltaTime * moveSpeed);
        }
    }
 
    /// 点击鼠标左键移动
    private void MouseMove()
    {
        if (Input.GetMouseButton(0))
        {
            Vector3 p1 = cameraTrans.position - cameraTrans.right * Input.GetAxisRaw(_mouseXString) * sensitivityDrag * Time.timeScale;
            Vector3 p2 = p1 - cameraTrans.up * Input.GetAxisRaw(_mouseYString) * sensitivityDrag * Time.timeScale;
            cameraTrans.position = p2;
        }
    }
 
    /// 按住鼠标右键开始旋转
    private void MouseRotation()
    {
        if (Input.GetMouseButton(1))
        {
            _currentMouseRotate.x = (Input.GetAxis(_mouseYString) * sensitivityRotate) * xAxisCoefficient;
            _currentMouseRotate.y = (Input.GetAxis(_mouseXString) * sensitivityRotate) * yAsixCoefficient;
 
            cameraTrans.rotation = Quaternion.Euler(cameraTrans.eulerAngles + _currentMouseRotate);
        }
    }
 
    /// 滑动鼠标滚轮进行放大、放小
    private void MouseScale()
    {
        if (Input.GetAxis(_mouseScrollWheel) == 0) return;
 
        mainCamera.fieldOfView = mainCamera.fieldOfView - Input.GetAxis(_mouseScrollWheel) * sensitivetyMouseWheel;
        mainCamera.fieldOfView = Mathf.Clamp(mainCamera.fieldOfView, fieldOfViewMin, fieldOfviewMax);
    }
}
 

猜你喜欢

转载自blog.csdn.net/qq_21743659/article/details/129884253