Files
JJBB/Assets/Project/Script/Player/Controller/ThirdPersonController.cs

100 lines
3.5 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
/********************************************************************************
* ThirdPersonController.cs
* \Script\Player\ThirdPersonController.cs
*
* 2013-11-05
*
*
*
*
*********************************************************************************/
/*
using Games.Scene;
using UnityEngine;
// 注:这玩意实际只提供方向,不提供速度
// 早期速度会只影响角色移动步长 - 刚开始步长较小,然后步长逐渐变大,实际每帧更新的话,只需要一个小步长即可
public class ThirdPersonController : MonoBehaviour
{
// 摇杆预测移动距离
private const float _joyStickMoveDelta = 2f;
/// <summary>
/// 获得当前Ui空间的摇杆/键盘输入方向
/// </summary>
public Vector2 GetCurrentInputDirection()
{
var result = Vector2.zero;
if (JoyStickLogic.Instance() != null)
result = JoyStickLogic.Instance().CurrentInput;
// 编辑器和PC端支持键盘和其他设备输入
#if UNITY_EDITOR || UNITY_STANDALONE
if (result == Vector2.zero)
{
result.x = Input.GetAxis("Horizontal");
result.y = Input.GetAxis("Vertical");
if (result.x > 0f)
result.x = 1f;
else if (result.x < 0f)
result.x = -1f;
if (result.y > 0f)
result.y = 1f;
else if (result.y < 0f)
result.y = -1f;
if (result != Vector2.zero)
result = result.normalized;
}
#endif
return result;
}
/// <summary>
/// 获得当前世界空间的摇杆/键盘输入方向
/// </summary>
public Vector3 GetCurrentInputDirectionInWorld()
{
var result = Vector3.zero;
Transform cameraTransform = null;
if (SceneLogic.CameraController != null && SceneLogic.CameraController.MainCamera != null)
cameraTransform = SceneLogic.CameraController.MainCamera.transform;
if (cameraTransform != null)
{
var inputDirection = GetCurrentInputDirection();
if (inputDirection != Vector2.zero)
{
var x = Vector3.Cross(Vector3.up, cameraTransform.forward);
if (x != Vector3.zero)
{
var z = Vector3.Cross(x, Vector3.up);
result = inputDirection.x * x + inputDirection.y * z;
}
}
}
return result;
}
public bool GetCurrentTargetPoint(out Vector3 movePosition)
{
var result = false;
movePosition = Vector3.zero;
var mainPlayer = Singleton<ObjManager>.GetInstance().MainPlayer;
if (mainPlayer != null)
{
// 摇杆和键盘输入优先
var joyStickInput = GetCurrentInputDirectionInWorld();
if (joyStickInput != Vector3.zero)
{
result = true;
movePosition = mainPlayer.Position + joyStickInput * _joyStickMoveDelta;
}
else if (ProcessInput.Instance() != null && ProcessInput.Instance().IsTouchMove)
{
result = true;
movePosition = ProcessInput.Instance().MovePoint;
}
}
return result;
}
}
*/