using UnityEngine;
using UnityEngine.EventSystems;
public class CameraModel : MonoBehaviour
{
float SensitivityX = 7F;
float SensitivityY = 7F;
float MinimumY = -60F;
float MaximumY = 60F;
public Transform cam;
/// <summary>
/// 鼠标拉近的速率
/// </summary>
float sensitivity = 250f;
public void Start()
{
gameObject.GetComponent<Camera>().enabled = true;
//if (gameObject.transform.GetComponent<Camera>())
// gameObject.transform.rotation = Quaternion.Euler(new Vector3(40, gameObject.transform.rotation.eulerAngles.y, gameObject.transform.rotation.eulerAngles.z));
if (!gameObject.GetComponent<AudioListener>())
{
gameObject.AddComponent<AudioListener>();
}
}
void Update()
{
RunLogic(cam);
}
/// <summary>
/// 相机控制类
/// </summary>
/// <param name="mainCamera"></param>
public void RunLogic(Transform mainCamera)
{
if (EventSystem.current != null && EventSystem.current.IsPointerOverGameObject())
{
return;
}
float mouseX = Input.GetAxis("Mouse X");
float mouseY = Input.GetAxis("Mouse Y");
mainCamera.transform.Translate(Vector3.forward * Time.deltaTime * Input.GetAxis("Mouse ScrollWheel") * sensitivity, Space.Self);
//按住左键拖拽地图
if (Input.GetMouseButton(0))
{
Vector3 Dir = mainCamera.transform.right;
Vector3 DirUp = mainCamera.transform.up;
mainCamera.transform.position += Dir * -mouseX;
mainCamera.transform.position += DirUp * -mouseY;
}
//右键旋转
if (Input.GetMouseButton(1))
{
var eulerX = mainCamera.localEulerAngles.x - mouseY * SensitivityY;
var eulerY = mainCamera.localEulerAngles.y + mouseX * SensitivityX;
if (eulerX > 200) eulerX -= 360;
eulerX = Mathf.Clamp(eulerX, MinimumY, MaximumY);
mainCamera.localEulerAngles = new Vector3(eulerX, eulerY, 0);
}
FilterCamPos(mainCamera.transform);
}
/// <summary>
/// 相机位置过滤
/// </summary>
/// <param name="mainCamera"></param>
private void FilterCamPos(Transform mainCamera)
{
//限制了相机的高
if (mainCamera.position.y < 0.6f)
{
mainCamera.position = new Vector3(mainCamera.position.x, 0.6f, mainCamera.position.z);
}
else if (mainCamera.position.y > 200f)
{
mainCamera.position = new Vector3(mainCamera.position.x, 200f, mainCamera.position.z);
}
if (mainCamera.position.z > 200f)
{
mainCamera.position = new Vector3(mainCamera.position.x, mainCamera.position.y, 200f);
}
else if (mainCamera.position.z < -90f)
{
mainCamera.position = new Vector3(mainCamera.position.x, mainCamera.position.y, -90f);
}
if (mainCamera.position.x > 160f)
{
mainCamera.position = new Vector3(160f, mainCamera.position.y, mainCamera.position.z);
}
else if (mainCamera.position.x < -160f)
{
mainCamera.position = new Vector3(-160f, mainCamera.position.y, mainCamera.position.z);
}
}
}
【Unity】场景漫游
最新推荐文章于 2024-04-25 09:50:53 发布