using UnityEngine;
/// <summary>
/// 漫游类
/// </summary>
public class Roam : MonoBehaviour
{
//[SerializeField]:将私有变量显示在Inspector视图上
/// <summary>
/// 鼠标移动速度
/// </summary>
[SerializeField] private float mouseMoveSpee;
/// <summary>
/// 移动速度
/// </summary>
[SerializeField] private float moveSpeed;
/// <summary>
/// 旋转速度
/// </summary>
[SerializeField] private float rotateSpeed;
/// <summary>
/// 缩放速度
/// </summary>
[SerializeField] private float zoomSpeed;
/// <summary>
/// 如果MonoBehaviour已启用,则在每一帧都调用Update
/// </summary>
private void Update()
{
//鼠标控制移动
MouseControlMove();
//键盘控制移动
KeyBoardControlMove();
//鼠标控制旋转
MouseControlRotate();
//鼠标控制缩放
MouseControlZoom();
}
/// <summary>
/// 功能:键盘移动
/// 操作:按下鼠标右键+WSADEQ
/// 介绍:WSADEQ分别对应前后左右上下
/// </summary>
private void KeyBoardControlMove()
{
/*
* 判断鼠标右键是否持续按钮
* 获取鼠标右键按下3种方式:
* 1、Input.GetMouseButton(1)
* 2、Input.GetButton("Fire2")
* 3、Input.GetKey(KeyCode.Mouse1)
*/
if (Input.GetMouseButton(1))
{
/*
* 功能:获取键盘上下移动
* 介绍:A键或左方向键控制向左,D键或右方向键控制向右
* 注意:这个是Unity内置的,可在Edit -> Project Settings -> Input下修改
*/
float horizontal = Input.GetAxisRaw("Horizontal");
/*
* 功能:获取键盘上下移动
* 介绍:W键或上方向键控制向前,S键或下方向键控制向后
* 注意:这个是Unity内置的,可在Edit -> Project Settings -> Input下修改
*/
float vertical = Input.GetAxisRaw("Vertical");
/*
* 功能:获取键盘上下移动
* 介绍:E键控制向上,Q键控制向下
* 注意:这个是自定义的,可在Edit -> Project Settings -> Input下修改
*/
float upOrDown = Input.GetAxisRaw("UpOrDown");
//移动方向
Vector3 increment = new Vector3(horizontal, upOrDown, vertical);
/*
* 开始移动
* increment:方向
* moveSpeed:速度
* Time.deltaTime:每秒移动多少
*/
transform.Translate(increment * moveSpeed * Time.deltaTime);
}
}
/// <summary>
/// 功能:鼠标控制旋转
/// 操作:持续按下鼠标右键滑动
/// </summary>
private void MouseControlRotate()
{
//判断鼠标右键持续按下
if (Input.GetMouseButton(1))
{
//获取鼠标水平移动
float mouseX = Input.GetAxisRaw("Mouse X");
//获取鼠标垂直移动
float mouseY = Input.GetAxisRaw("Mouse Y");
//旋转方向
Vector3 increment = new Vector3(-mouseY, mouseX, 0);
/*
* 开始旋转
* increment:旋转方向
* rotateSpeed:旋转速度
* Time.deltaTime:每秒旋转多少度
* 此方法可以解决万向锁现象
*/
transform.localEulerAngles += increment * rotateSpeed * Time.deltaTime;
}
}
/// <summary>
/// 功能:鼠标控制缩放
/// 操作:滑动鼠标滚轮
/// </summary>
private void MouseControlZoom()
{
//获取向前还是向后滑动
float mouseScrollWheel = Input.GetAxisRaw("Mouse ScrollWheel");
//缩放方向
Vector3 increment = new Vector3(0, 0, mouseScrollWheel);
/*
* increment:滑动方向
* zoomSpeed:滑动速度
* Time.deltaTime:每秒滑动多少米
*/
transform.Translate(increment * zoomSpeed * Time.deltaTime);
}
/// <summary>
/// Q键状态
/// </summary>
bool isQDown;
/// <summary>
/// 鼠标控制移动
/// </summary>
private void MouseControlMove()
{
//判断Q键是否按下
if (Input.GetKeyDown(KeyCode.Q))
{
//判断Q键状态是否为没按下
if (!isQDown)
{
//Q键状态改成按下
isQDown = true;
}
else
{
//Q键状态改成未按下
isQDown = false;
}
}
//判断鼠标左键是否持续按下并且Q键状态为按下
if (Input.GetMouseButton(0) && isQDown)
{
//获取鼠标水平移动
float mouseX = Input.GetAxisRaw("Mouse X");
//获取鼠标垂直移动
float mouseY = Input.GetAxisRaw("Mouse Y");
//获取移动方向
Vector3 increment = new Vector3(mouseX, mouseY, 0);
/*
* 开始移动
* increment:移动方向
* mouseMoveSpee:移动速度
* Time.deltaTime:每秒移动多少米
*/
transform.Translate(increment * mouseMoveSpee * Time.deltaTime);
}
}
}