模仿UnityScene模式下开发者对相机的基础操作方式就一个脚本挂相机上就行了。
Demo资源点这里
/*****************************************************
文件:CameraControl.cs
版本:01
作者:GZL
功能:相机旋转拖拽移动缩放
*****************************************************/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraControl : MonoBehaviour
{
public static CameraControl _instance;
public float moveOrRotSpeed = 5;
public float translationSpeed = 10;
public float setXMin;
public float setXMax;
public float setYMin;
public float setYMax;
public float setZMin;
public float setZMax;
private Camera _camera;
void Start()
{
_instance = this;
_camera = Camera.main;
}
void LateUpdate()
{
//鼠标在这一帧移动的水平距离
float x = Input.GetAxis("Mouse X");
//鼠标在这一帧移动的垂直距离
float y = Input.GetAxis("Mouse Y");
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
if (Input.GetMouseButton(1))
{
//绕世界坐标中的y轴旋转
transform.Rotate(Vector3.up * x * moveOrRotSpeed, Space.World);
//绕自身的x轴转
transform.Rotate(Vector3.right * -y * moveOrRotSpeed);
this._camera.transform.Translate(new Vector3(h * moveOrRotSpeed * Time.deltaTime, 0, v * moveOrRotSpeed * Time.deltaTime));
}
else if (Input.GetMouseButton(2))
{
this._camera.transform.Translate(new Vector3(-x * translationSpeed * Time.deltaTime, -y * translationSpeed * Time.deltaTime, 0));
}
else
{
float ms = Input.GetAxis("Mouse ScrollWheel");
this._camera.transform.Translate(new Vector3(0f, 0f, ms * 100 * Time.deltaTime));
}
//空格键抬升高度
if (Input.GetKey(KeyCode.Space))
{
transform.position = new Vector3(transform.position.x, transform.position.y + 0.1f, transform.position.z);
}
else if (Input.GetKey(KeyCode.LeftControl))
{
transform.position = new Vector3(transform.position.x, transform.position.y - 0.1f, transform.position.z);
}
var position = _camera.transform.position;
position = new Vector3(Mathf.Clamp(position.x, setXMin, setXMax), Mathf.Clamp(position.y, setYMin, setYMax), Mathf.Clamp(position.z, setZMin, setZMax));
_camera.transform.position = position;
}
}