using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//This script requires you to have setup your animator with 3 parameters, "InputMagnitude", "InputX", "InputZ"
//With a blend tree to control the inputmagnitude and allow blending between animations.
[RequireComponent(typeof(CharacterController))]
public class MovementInput : MonoBehaviour
{
public float InputX;
public float InputZ;
public Vector3 desiredMoveDirection;
public bool blockRotationPlayer;
public float desiredRotationSpeed;
public Animator anim;
public float Speed;
public float moveSpeed;
public float allowPlayerRotation;
public Camera cam;
public CharacterController controller;
public bool isGrounded;
private float verticalVel;
private Vector3 moveVector;
// Use this for initialization
void Start()
{
anim = this.GetComponent<Animator>();
cam = Camera.main;
controller = this.GetComponent<CharacterController>();
}
// Update is called once per frame
void Update()
{
InputMagnitude();
//解决人物不受重力的问题
isGrounded = controller.isGrounded;
if (isGrounded)
{
verticalVel -= 0;
}
else
{
verticalVel -= 2;
}
moveVector = new Vector3(0,verticalVel,0);
controller.Move(moveVector);
}
private void PlayerMoveAndRotation()
{
float InputX = anim.GetFloat("InputX");
float InputZ = anim.GetFloat("InputZ");
Vector3 desiredForward = cam.transform.right;//获取camera的前轴向,和右轴向,让character旋转完后正(背)对摄像机,根据用户输入值大小判断负值则转到反方向
Vector3 desiredRight = cam.transform.forward;
desiredMoveDirection = desiredForward * InputX + desiredRight * InputZ;
if (blockRotationPlayer==false)
{
transform.localRotation = Quaternion.Slerp(transform.localRotation,Quaternion.LookRotation(desiredMoveDirection),desiredRotationSpeed);
}q
controller.SimpleMove(desiredMoveDirection*moveSpeed);
}
private void InputMagnitude()
{
float InputX = Input.GetAxis("Horizontal");
float InputZ = Input.GetAxis("Vertical");
anim.SetFloat("InputX", InputX);
anim.SetFloat("InputZ", InputZ);
float inputMagnitude = (new Vector3(InputX, 0, InputZ)).sqrMagnitude;
anim.SetFloat("InputMagnitude",inputMagnitude);
if (inputMagnitude>allowPlayerRotation) //在这里判断输入值不为0,才改变character的旋转值,防止character旋转方向变成(0,0,0)
{
PlayerMoveAndRotation();
}
}
}
unity第三人称人物移动,实现人物的边行走边旋转
猜你喜欢
转载自blog.csdn.net/Icecoldless/article/details/81839773
今日推荐
周排行