/******************************************************************************** * 文件名: ThirdPersonController.cs * 全路径: \Script\Player\ThirdPersonController.cs * 创建人: 李嘉 * 创建时间:2013-11-05 * * 功能说明: 第三人称视角移动类 * 之后正式版中如果改为手指输入则将该类替换掉即可 * 修改记录: *********************************************************************************/ /* using Games.Scene; using UnityEngine; // 注:这玩意实际只提供方向,不提供速度 // 早期速度会只影响角色移动步长 - 刚开始步长较小,然后步长逐渐变大,实际每帧更新的话,只需要一个小步长即可 public class ThirdPersonController : MonoBehaviour { // 摇杆预测移动距离 private const float _joyStickMoveDelta = 2f; /// /// 获得当前Ui空间的摇杆/键盘输入方向 /// 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; } /// /// 获得当前世界空间的摇杆/键盘输入方向 /// 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.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; } } */