Unity鼠标控制摄像机

Unity鼠标控制摄像机

类似场景编辑器控制画面的前进旋转拖动

/**********
*	author        :  "小白虫||镜子"
*	time          :  "2021-10-22"
*	describe      :  "鼠标控制相机,第一人称"
*       unity version :  "2020.3.20"
*       Blog          :  "https://www.cnblogs.com/jzyl"
**********/


using UnityEngine;

public class ControlCamera : MonoBehaviour
{
    public Camera MainCamera;
    public float Speed = 10.0f;

    private float MoveH;
    private float MoveV;
    private float MoveSpeed;
    private float RotateX;
    private float RotateY;

    private void Update()
    {
        if (Input.GetMouseButton(1)) //鼠标右键按下时开始控制
        {
            Move();
            Rotate();
        }
        else if (Input.GetMouseButton(2)) //鼠标中键控制拖动
        {
            Drag();
        }
        else
        {
            MoveSpeed = 1.0f;
        }
    }
    private void Move()
    {
        MoveSpeed += Input.GetAxis("Mouse ScrollWheel");
        MoveSpeed = Mathf.Clamp(MoveSpeed, 0.02f, 10.0f);

        MoveH = Input.GetAxis("Horizontal") * Time.deltaTime * Speed * (Input.GetKey(KeyCode.LeftShift) ? 2 : 1) * MoveSpeed;
        MoveV = Input.GetAxis("Vertical") * Time.deltaTime * Speed * (Input.GetKey(KeyCode.LeftShift) ? 2 : 1) * MoveSpeed;

        MainCamera.transform.Translate(new Vector3(MoveH, 0, MoveV), Space.Self);
    }

    private void Rotate()
    {
        RotateX = Input.GetAxis("Mouse X") * Time.deltaTime * Speed * 70;
        RotateY = Input.GetAxis("Mouse Y") * Time.deltaTime * Speed * 70;

        MainCamera.transform.Rotate(Vector3.up * RotateX, Space.World);
        MainCamera.transform.Rotate(Vector3.right * -RotateY, Space.Self);
    }
    private void Drag()
    {
        var pos = Input.GetAxis("Mouse X") * MainCamera.transform.right + Input.GetAxis("Mouse Y") * MainCamera.transform.up;
        MainCamera.transform.localPosition -= pos;
    }
}

posted @ 2021-10-22 15:15  镜子-眼泪  阅读(669)  评论(0)    收藏  举报