改进版
输入控制
using UnityEngine;
namespace script
{
public class PlayerInput : MonoBehaviour
{
protected float InputH;
protected float InputV;
//控制角色的速度
protected float InputSpeed;
protected bool InputRun;
protected bool InputJump;
//是否可移动
protected bool MoveAble;
// Use this for initialization
protected virtual void Start()
{
MoveAble = true;
InputJump = false;
}
// Update is called once per frame
protected virtual void Update()
{
//要在Update里检测,FixedUpdate可能会错过为GetKeyDown为true的帧
if (Input.GetKeyDown(KeyCode.Mouse0))
{
MoveAble = false;
}
InputH = Input.GetAxis("Horizontal");
InputV = Input.GetAxis("Vertical");
SquareToCircle();
InputSpeed = Mathf.Sqrt(InputH * InputH + InputV * InputV);
if (Input.GetKey(KeyCode.LeftShift))
{
InputRun = true;
}
else
{
InputRun = false;
}
if (Input.GetKeyDown(KeyCode.Space))
{
InputJump = true;
}
else if (Input.GetKeyUp(KeyCode.Space))
{
InputJump = false;
}
}
/**
* 直角坐标转圆形坐标
*/
private void SquareToCircle()
{
InputH = InputH * Mathf.Sqrt(1 - InputV * InputV / 2.0f);
InputV = InputV * Mathf.Sqrt(1 - InputH * InputH / 2.0f);
}
}
}
动画控制器
using UnityEngine;
using Random = UnityEngine.Random;
namespace script
{
/**
* 动画控制器
*/
public class AnimController : PlayerInput
{
protected bool isHit;
private bool isAttack;
private bool attackFlag;
private float time;
private int jumpBool;
private int speedFloat;
private int attackBool;
private float animSpeed;
protected Camera MainCamera;
private Animator animator;
protected virtual void Awake()
{
animator = GetComponent<Animator>();
}
// Use this for initialization
protected override void Start()
{
base.Start();
//获取动画变量的Hash值,提高效率
jumpBool = Animator.StringToHash("Jump");
speedFloat = Animator.StringToHash("Speed");
attackBool = Animator.StringToHash("Attack");
MainCamera = Camera.main;
time = 0;
MoveAble = true;
}
/**
* 播放等待动画
*/
private void PlayWaitAnim()
{
if (Input.anyKey)
{
time = 0;
}
else
{
time += Time.deltaTime;
//30秒后,随机播放等待动画
if (time > 30)
{
var animCode = Random.Range(1, 5);
animator.Play("WAIT0" + animCode, -1);
time = 0;
}
}
}
public void ClearSignalAttack()
{
MoveAble = true;