using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMove : CameraController
{
///
/// 速度
///
private float m_Speed;
///
/// 加速度
///
private float m_AcceSpeed = 50;
///
/// 最大移动速度
///
public float maxSpeed = 50;
[Range(0, 1), Tooltip("旋转响应速度")]
public float RotLerp = 0.4f;
[Range(0, 1), Tooltip("移动响应速度")]
public float AccelerationLerp = 0.3f;
///
/// 滚轮移动速度
///
private float m_ScrollSpeed = 80;
protected override void Start()
{
base.Start();
Debug.Log("相机控制初始化");
InitTransform();
}
bool lostFocus;
protected override void Update()
{
base.Update();
if (ShieldingOperation) return;
if (!Application.isFocused)
lostFocus = true;
#region 旋转
if (UtilityInput.HoldRightMouse)
{
//解决当重新获取焦点时,鼠标移动值异常的情况
if (lostFocus)
{
lostFocus = false;
return;
}
horizontal += UtilityInput.MouseMoveX;
vertical -= UtilityInput.MouseMoveY;
vertical = Mathf.Clamp(vertical, -90, 90);
}
eulerx = Mathf.Lerp(eulerx, horizontal, RotLerp);
eulery = Mathf.Lerp(eulery, vertical, RotLerp);
#endregion
#region 移动
//键盘移动
if (UtilityInput.Horizontal != 0 || UtilityInput.Vertical != 0)
{
if (Target != null) Target = null;
if (m_Speed < maxSpeed)
m_Speed += Time.deltaTime * m_AcceSpeed;
myPos += transform.TransformDirection(Dirction);
}
else
{
m_Speed -= Time.deltaTime * m_AcceSpeed;
}
m_Speed = Mathf.Clamp(m_Speed, 0, maxSpeed);
//滚轮前进
//if (Dirction.Equals(Vector3.zero) && UtilityInput.Scroll != 0)
//{
// if (Target != null) distance -= UtilityInput.Scroll * m_ScrollSpeed;
// distance = Mathf.Clamp(distance, 20, 500);
// myPos += transform.TransformDirection(Vector3.forward * UtilityInput.Scroll * m_ScrollSpeed);
//}
//滚轮移动
if (Dirction.Equals(Vector3.zero) && UtilityInput.HoldMiddleMouse)
{
float x = UtilityInput.MouseMoveX;
float y = UtilityInput.MouseMoveY;
myPos += transform.TransformDirection(new Vector3(-x, -y) * 2);
}
#endregion
transform.rotation = Quaternion.Euler(eulery, eulerx, 0);
if (Target == null)
{
myPos.x = Mathf.Clamp(myPos.x, XLimit.x, XLimit.y);
myPos.y = Mathf.Clamp(myPos.y, YLimit.x, YLimit.y);
myPos.z = Mathf.Clamp(myPos.z, ZLimit.x, ZLimit.y);
//transform.position = Vector3.Lerp(transform.position, myPos, AccelerationLerp);
transform.localPosition = Vector3.Lerp(transform.localPosition, myPos, AccelerationLerp);
}
else
{
//存在定位目标时,绕目标旋转
Vector3 tempPos = transform.rotation * Vector3.back * Distance + Target.position;
tempPos.x = Mathf.Clamp(tempPos.x, XLimit.x, XLimit.y);
tempPos.y = Mathf.Clamp(tempPos.y, YLimit.x, YLimit.y);
tempPos.z = Mathf.Clamp(tempPos.z, ZLimit.x, ZLimit.y);
transform.position = myPos = tempPos;
}
}
///
/// 键盘操作
///
public Vector3 Dirction
{
get
{
Vector3 tmp= new Vector3(UtilityInput.Horizontal, 0, UtilityInput.Vertical) * Time.deltaTime * m_Speed * (UtilityInput.SpeedUp ? 2 : 1);
//Debug.Log(tmp);
return tmp;
}
}
}