引擎综合项目1day

234 阅读2分钟

image.png

给角色人物移动 设置动画 ,走路 跑步动画。

  1. 人物的三个部分都要添加动画器。

image.png

2.添加混合动画。根据键盘移动调整参数 决定播放动画

image.png

image.png

3.制作动画, 分别制作 body arm hair 的动画,(走路和奔跑的各个方向) image.png

4.挂载脚本

image.png

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);

        }

    }
}