using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class CameraManager : MonoBehaviour
{
//旋转速度
public float rotationSpeed = 5f;
//旋转速度
public float moveSpeed = 5f;
//上下旋转角度限制
public float maxVerticalAngle = 40f;
public float minVerticalAngle = -40f;
//旋转缓冲速度
public float lerpSpeed = 10f;
private float targetRotationX = 0f;
private float targetRotationY = 0f;
void Update()
{
//右键按住旋转
Rotate();
//W,A,S,D四个方向移动
Move();
}
//W,A,S,D四个方向移动
private void Move()
{
if (Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(Vector3.back * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A))
{
transform.Translate(Vector3.left * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.D))
{
transform.Translate(Vector3.right * moveSpeed * Time.deltaTime);
}
transform.localPosition = new Vector3(transform.localPosition.x, 1, transform.localPosition.z);
}
//右键按住旋转
private void Rotate()
{
if (Input.GetMouseButton(1))
{
// 获取鼠标输入的旋转增量
float rotationXInput = -Input.GetAxis("Mouse Y");
float rotationYInput = Input.GetAxis("Mouse X");
// 根据旋转速度进行摄像机的旋转
targetRotationX += rotationXInput * rotationSpeed;//绕X轴上下旋转
// 对上下旋转角度进行限制
targetRotationX = Mathf.Clamp(targetRotationX, minVerticalAngle, maxVerticalAngle);
targetRotationY += rotationYInput * rotationSpeed; //绕Y轴左右旋转
// 根据旋转角度更新摄像机的欧拉角,Quaternion.Lerp可以使摄像机旋转更加平滑
Quaternion targetRotation = Quaternion.Euler(targetRotationX, targetRotationY, 0f);
transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, lerpSpeed * Time.deltaTime);
}
}
/// <summary>
/// 判断是否点击到UI
/// </summary>
/// <returns></returns>
bool CheckGuiRaycastObjects()
{
PointerEventData eventData = new PointerEventData(EventSystem.current);
eventData.pressPosition = Input.mousePosition;
eventData.position = Input.mousePosition;
List<RaycastResult> list = new List<RaycastResult>();
EventSystem.current.RaycastAll(eventData, list);
return list.Count > 0;
}
}
07-11
4585
03-23
2807
04-23
594
07-28