Files
JJBB/Assets/Project/Script/Player/Controller/ThirdPersonController.cs
2024-08-23 15:49:34 +08:00

100 lines
3.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/********************************************************************************
* 文件名: 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;
}
}
*/