Third Person Controller
脚本
绑定在角色模型上的主要是这两个脚步,以下简称Controller脚本和Input脚本
先分析vThirdPersonInput
ThirdPersonInput主要是对输入信号进行处理,并把相关的值传递给Controller
#region Variables
[Header("Controller Input")]
public string horizontalInput = "Horizontal";
public string verticallInput = "Vertical";
/*空格键控制jump*/
public KeyCode jumpInput = KeyCode.Space;
/*侧向移动模式,控制角色侧向移动时候,是转身移动还是侧向移动*/
public KeyCode strafeInput = KeyCode.Tab;
/*sprint冲刺*/
public KeyCode sprintInput = KeyCode.LeftShift;
[Header("Camera Input")]
/*控制相机移动*/
public string rotateCameraXInput = "Mouse X";
public string rotateCameraYInput = "Mouse Y";
[HideInInspector] public vThirdPersonController cc;
[HideInInspector] public vThirdPersonCamera tpCamera;
[HideInInspector] public Camera cameraMain;
public string horizontalInput = "Horizontal";
cc.input.x = Input.GetAxis(horizontalInput);//horizontalInput对应键盘上面的左右箭头
cc.input.x = Input.GetAxis(verticallInput);//verticallInput对应键盘上面的上下箭头
在Input中会调用Controller的updateAnimator方法
protected virtual void Update()
{
InputHandle(); // update the input methods
cc.UpdateAnimator(); // updates the Animator Parameters
}
public virtual void UpdateAnimator()
{
if (animator == null || !animator.enabled) return;
animator.SetBool(vAnimatorParameters.IsStrafing, isStrafing); ;
animator.SetBool(vAnimatorParameters.IsSprinting, isSprinting);
animator.SetBool(vAnimatorParameters.IsGrounded, isGrounded);
animator.SetFloat(vAnimatorParameters.GroundDistance, groundDistance);
if (isStrafing)
{
animator.SetFloat(vAnimatorParameters.InputHorizontal, stopMove ? 0 : horizontalSpeed, strafeSpeed.animationSmooth, Time.deltaTime);
animator.SetFloat(vAnimatorParameters.InputVertical, stopMove ? 0 : verticalSpeed, strafeSpeed.animationSmooth, Time.deltaTime);
}
else
{
animator.SetFloat(vAnimatorParameters.InputVertical, stopMove ? 0 : verticalSpeed, freeSpeed.animationSmooth, Time.deltaTime);
}
animator.SetFloat(vAnimatorParameters.InputMagnitude, stopMove ? 0f : inputMagnitude, isStrafing ? strafeSpeed.animationSmooth : freeSpeed.animationSmooth, Time.deltaTime);
}
updateAnimator是控制动画的关键函数,由于用的都是根动画,所以不需要计算位移量
Controller类的继承关系
vThirdPersonController : vThirdPersonAnimator
vThirdPersonAnimator : vThirdPersonMotor 发动机、马达
vThirdPersonMotor : Mono