271 lines
7.1 KiB
C#
271 lines
7.1 KiB
C#
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using UnityEngine.AI;
|
|||
|
|
|
|||
|
|
public class MouseController : BaseController
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>Transform
|
|||
|
|
/// <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ǰ<EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
[Tooltip("<22><><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>Transform<72><6D>Ĭ<EFBFBD><C4AC>Ϊ<EFBFBD><CEAA>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>")]
|
|||
|
|
public Transform tran;
|
|||
|
|
[Tooltip("<22><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת")]
|
|||
|
|
public bool RotateEnabled = true;
|
|||
|
|
[Tooltip("<22><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>")]
|
|||
|
|
public bool MoveEnabled = true;
|
|||
|
|
[Tooltip("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>")]
|
|||
|
|
public bool CameraFovEnabled = true;
|
|||
|
|
|
|||
|
|
void Start()
|
|||
|
|
{
|
|||
|
|
if (tran == null)
|
|||
|
|
tran = transform;
|
|||
|
|
|
|||
|
|
agent = GetComponent<NavMeshAgent>();
|
|||
|
|
|
|||
|
|
if (H5Controller.IsMobileBroswer())
|
|||
|
|
{
|
|||
|
|
Destroy(this);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Update()
|
|||
|
|
{
|
|||
|
|
if (CanControl && !IsJoyStickOnControl)
|
|||
|
|
{
|
|||
|
|
if (RotateEnabled)
|
|||
|
|
RotateWithMouse();
|
|||
|
|
if (MoveEnabled)
|
|||
|
|
MoveWithMidBtn();
|
|||
|
|
if (CameraFovEnabled)
|
|||
|
|
CameraFOVWithWheel();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
|
|||
|
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
float mouseX;
|
|||
|
|
float mouseY;
|
|||
|
|
float rotationX;
|
|||
|
|
float rotationY;
|
|||
|
|
Quaternion rotation;
|
|||
|
|
|
|||
|
|
[Header("<22><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>")]
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶķ<C6B5><C4B7><EFBFBD>ö<EFBFBD><C3B6>
|
|||
|
|
/// </summary>
|
|||
|
|
[Tooltip("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶķ<C6B5><C4B7><EFBFBD>ö<EFBFBD><C3B6>")]
|
|||
|
|
public RotationAxes axes = RotationAxes.MouseXAndY;
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
[Tooltip("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>")]
|
|||
|
|
public int yRotationMinLimit = -10;
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
[Tooltip("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>")]
|
|||
|
|
public int yRotationMaxLimit = 30;
|
|||
|
|
/// <summary>
|
|||
|
|
/// ˮƽ<CBAE><C6BD>ת<EFBFBD>ٶ<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
[Tooltip("ˮƽ<CBAE><C6BD>ת<EFBFBD>ٶ<EFBFBD>")]
|
|||
|
|
public float xRotationSpeed = 3;
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ֱ<EFBFBD><D6B1>ת<EFBFBD>ٶ<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
[Tooltip("<22><>ֱ<EFBFBD><D6B1>ת<EFBFBD>ٶ<EFBFBD>")]
|
|||
|
|
public float yRotationSpeed = 3;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>Ϊˮƽ<CBAE><C6BD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
[Tooltip("<22>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>Ϊˮƽ<CBAE><C6BD><EFBFBD>ٶ<EFBFBD>")]
|
|||
|
|
public float resetAngleSpeed = 1f;
|
|||
|
|
|
|||
|
|
NavMeshAgent agent;
|
|||
|
|
Vector3 upPos;
|
|||
|
|
Vector3 vTmp;
|
|||
|
|
|
|||
|
|
void RotateWithMouse()
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if ((Input.touchCount == 0 && Input.GetMouseButton(0)) || Input.touchCount == 1)
|
|||
|
|
{
|
|||
|
|
// agent.enabled = false;
|
|||
|
|
|
|||
|
|
IsMouseOnControl = true;
|
|||
|
|
|
|||
|
|
if (axes == RotationAxes.MouseXAndY)
|
|||
|
|
{
|
|||
|
|
rotationX = CommonData.MainCamera.transform.localEulerAngles.y + Input.GetAxis("Mouse X") * xRotationSpeed;
|
|||
|
|
rotationY += Input.GetAxis("Mouse Y") * yRotationSpeed;
|
|||
|
|
rotationY = Mathf.Clamp(rotationY, yRotationMinLimit, yRotationMaxLimit);
|
|||
|
|
CommonData.MainCamera.transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
|
|||
|
|
}
|
|||
|
|
else if (axes == RotationAxes.MouseX)
|
|||
|
|
{
|
|||
|
|
CommonData.MainCamera.transform.Rotate(0, Input.GetAxis("Mouse X") * yRotationSpeed, 0);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
rotationY += Input.GetAxis("Mouse Y") * yRotationSpeed;
|
|||
|
|
rotationY = Mathf.Clamp(rotationY, yRotationMinLimit, yRotationMaxLimit);
|
|||
|
|
CommonData.MainCamera.transform.localEulerAngles = new Vector3(-rotationY, CommonData.MainCamera.transform.localEulerAngles.y, 0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//GetComponent<NavMeshAgent>().enabled = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (Input.GetMouseButtonUp(0))
|
|||
|
|
{
|
|||
|
|
rotationX = 0;
|
|||
|
|
rotationY = 0;
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>תλ<D7AA><CEBB>
|
|||
|
|
upPos = tran.localRotation.eulerAngles;
|
|||
|
|
if (upPos.x > yRotationMaxLimit + 1)
|
|||
|
|
{
|
|||
|
|
upPos.x -= 360f;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
IsMouseOnControl = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (IsMouseOnControl && agent != null && !agent.enabled)
|
|||
|
|
{
|
|||
|
|
vTmp = tran.localRotation.eulerAngles;
|
|||
|
|
|
|||
|
|
if (Mathf.Abs(vTmp.x) <= 0.01f)
|
|||
|
|
{
|
|||
|
|
vTmp.x = 0;
|
|||
|
|
// agent.enabled = true;
|
|||
|
|
IsMouseOnControl = false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
vTmp.x -= Time.deltaTime * upPos.x * resetAngleSpeed;
|
|||
|
|
if ((upPos.x > 0 && vTmp.x <= 0) || (upPos.x < 0 && vTmp.x >= 360f))
|
|||
|
|
{
|
|||
|
|
vTmp.x = 0;
|
|||
|
|
// agent.enabled = true;
|
|||
|
|
IsMouseOnControl = false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
tran.localRotation = Quaternion.Euler(vTmp);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ĽǶ<C4BD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="value"><3E>Ƕ<EFBFBD>ֵ</param>
|
|||
|
|
/// <param name="min"><3E><>Сֵ</param>
|
|||
|
|
/// <param name="max"><3E><><EFBFBD><EFBFBD>ֵ</param>
|
|||
|
|
float ClampValue(float value, float min, float max)
|
|||
|
|
{
|
|||
|
|
// <20><EFBFBD><DEB6><EFBFBD>0-360֮<30><D6AE>
|
|||
|
|
if (value <= -360)
|
|||
|
|
value += 360;
|
|||
|
|
if (value >= 360)
|
|||
|
|
value -= 360;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>value<75><65>ֵ<EFBFBD><D6B5>min<69><6E>max֮<78>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>valueС<65><D0A1>min<69><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>min<69><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>value<75><65><EFBFBD><EFBFBD>max<61><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD>max<61><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD>value
|
|||
|
|
return Mathf.Clamp(value, min, max);
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region <EFBFBD>м<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
|
|||
|
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
float mouseX2;
|
|||
|
|
float mouseY2;
|
|||
|
|
Vector3 moveDir;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20>м<EFBFBD><D0BC>ƶ<EFBFBD><C6B6>ٶ<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
[Header("<22><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>")]
|
|||
|
|
[Tooltip("<22>м<EFBFBD><D0BC>ƶ<EFBFBD><C6B6>ٶ<EFBFBD>")]
|
|||
|
|
public float moveSpeed = 1;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public void MoveWithMidBtn()
|
|||
|
|
{
|
|||
|
|
if (Input.GetMouseButton(2))
|
|||
|
|
{
|
|||
|
|
mouseX2 = Input.GetAxis("Mouse X");
|
|||
|
|
mouseY2 = Input.GetAxis("Mouse Y");
|
|||
|
|
if (mouseX2 != 0 || mouseY2 != 0)
|
|||
|
|
{
|
|||
|
|
IsMouseOnControl = true;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>λ<EFBFBD>õ<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Vector3<72><33><EFBFBD>ͣ<EFBFBD>ʵ<EFBFBD><CAB5>ԭ<EFBFBD><D4AD><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļӷ<C4BC><D3B7><EFBFBD>
|
|||
|
|
moveDir = (mouseX2 * -tran.right + mouseY2 * -tran.forward);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>y<EFBFBD><79><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|||
|
|
moveDir.y = 0;
|
|||
|
|
tran.position += moveDir * 0.5f * moveSpeed;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (Input.GetMouseButtonUp(2))
|
|||
|
|
{
|
|||
|
|
IsMouseOnControl = false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
#region <EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
float fov; // <20>Ƕ<EFBFBD>
|
|||
|
|
float wheel; // <20><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// fov <20><>С<EFBFBD>Ƕ<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
[Tooltip("fov <20><>С<EFBFBD>Ƕ<EFBFBD>")]
|
|||
|
|
public int fovMinLimit = 25;
|
|||
|
|
/// <summary>
|
|||
|
|
/// fov <20><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
[Tooltip("fov <20><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>")]
|
|||
|
|
public int fovMaxLimit = 75;
|
|||
|
|
/// <summary>
|
|||
|
|
/// fov <20>仯<EFBFBD>ٶ<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
[Tooltip("fov <20>仯<EFBFBD>ٶ<EFBFBD>")]
|
|||
|
|
public float fovSpeed = 50.0f;
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
public void CameraFOVWithWheel()
|
|||
|
|
{
|
|||
|
|
wheel = Input.GetAxis("Mouse ScrollWheel");
|
|||
|
|
if (wheel != 0)
|
|||
|
|
{
|
|||
|
|
fov = CommonData.MainCamera.fieldOfView;
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵĻ<D6B5><C4BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
fov += wheel * Time.deltaTime * 100 * fovSpeed;
|
|||
|
|
// fov <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
fov = Mathf.Clamp(fov, fovMinLimit, fovMaxLimit);
|
|||
|
|
//<2F>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fov
|
|||
|
|
CommonData.MainCamera.fieldOfView = fov;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>
|
|||
|
|
/// </summary>
|
|||
|
|
public enum RotationAxes
|
|||
|
|
{
|
|||
|
|
MouseXAndY,
|
|||
|
|
MouseX,
|
|||
|
|
MouseY
|
|||
|
|
}
|