给角色人物移动 设置动画 ,走路 跑步动画。
- 人物的三个部分都要添加动画器。
2.添加混合动画。根据键盘移动调整参数 决定播放动画
3.制作动画,
分别制作 body arm hair 的动画,(走路和奔跑的各个方向)
4.挂载脚本
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class Player : MonoBehaviour
{
private Rigidbody2D rig; //刚体
private float inputX;
private float inputY;
private float inputXX;
private float inputYY;
private Vector2 movementValue; //二维的信息
private float speed=3;
//关联身体 ,手 ,头发的控制器。
public Animator body;
public Animator hand;
public Animator hair;
private void Awake()
{
rig =GetComponent<Rigidbody2D>(); // 唤醒是获取角色身上的刚体
}
private void Update()
{
getMoveValue();
//动画改变的方式
animateMove();
}
private void animateMove()
{
//inputX inputY 这两个偏移量 在-1,0,1 这三个值之间变化 inputX +0.1 保证停下来对应的状态的值不能是0
if(inputX==0&&inputY==0) // 什么情况要变化0.1 是不是上一帧按下了上键松开 全部松开的是时候才要切换默认状态
{
body.SetFloat("x", inputXX*0.1f); //记录一下上一次 inputX的值 0.1 0
body.SetFloat("y", inputYY*0.1f);
hair.SetFloat("x", inputXX * 0.1f); //记录一下上一次 inputX的值 0.1 0
hair.SetFloat("y", inputYY * 0.1f);
hand.SetFloat("x", inputXX * 0.1f); //记录一下上一次 inputX的值 0.1 0
hand.SetFloat("y", inputYY * 0.1f);
}
else
{
inputXX =Input.GetAxisRaw("Horizontal");
inputYY = Input.GetAxisRaw("Vertical");
if (Input.GetKey(KeyCode.LeftShift))
{
body.SetFloat("x", inputX*2); //记录上一次的inputX的值
body.SetFloat("y", inputY*2);
hair.SetFloat("x", inputX*2); //记录上一次的inputX的值
hair.SetFloat("y", inputY*2);
hand.SetFloat("x", inputX*2); //记录上一次的inputX的值
hand.SetFloat("y", inputY*2);
}
else
{
body.SetFloat("x", inputX); //记录上一次的inputX的值
body.SetFloat("y", inputY);
hair.SetFloat("x", inputX); //记录上一次的inputX的值
hair.SetFloat("y", inputY);
hand.SetFloat("x", inputX); //记录上一次的inputX的值
hand.SetFloat("y", inputY);
}
}
}
private void FixedUpdate()
{
move();
}
//获取x,y 的偏移量变化值
private void getMoveValue()
{
inputX = Input.GetAxisRaw("Horizontal");
inputY = Input.GetAxisRaw("Vertical");
movementValue = new Vector2(inputX,inputY);
//print(movementValue.normalized);// 取模
movementValue = movementValue.normalized;// 偏移速度太快了。 所以呢将偏移量进行取模的操作。
}
// 实现任务的移动
private void move()
{
if (Input.GetKey(KeyCode.LeftShift))
{
rig.MovePosition(rig.position + movementValue * Time.deltaTime * speed*2);
}
else
{
rig.MovePosition(rig.position + movementValue * Time.deltaTime * speed);
}
}
}