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