WEIC`S BLOG

Unity Animator动画状态机之实现角色行走动画实例

学习笔记

通过代码控制动画状态机播放角色行走动画(不会实现行走效果);

资源使用的是Unity自带的角色控制器里的模型和动画;

一、前期

角色的创建和资源的准备这里不多说;

二、Animation Controller方面

1.首先把需要的素材先准备好吧(模型和动画)

2.新建一个Animation Controller并打开,然后将动画按下图那样拖进去并摆好

3.将动画之间连线,在状态机里的动画上点击鼠标右键,选择Make Transition引出一个箭头,按照下图方式连接(要记得线要有来也有回)

4.创建三个变量,分别是float类型的Speed变量和Turn变量,bool类型的isRun变量

5.点击状态机里箭头,说通俗点就是if判断功能,然后按下图操作(这里要特别注意一下图中的第二步,如果不消勾的话动画播放完才会停止,具体可以实际体会一下)

6.添加判断条件,如果这个条件成立那么箭头就会打开

7.每个箭头都要有条件,所有箭头的条件看下图

三、角色设置方面

1.将刚才创建好的Animation Controller给角色的Animator属性,如果角色没有Animator那么就创建一个

2.给角色创建一个脚本,命名为PlayerAnimator,打开脚本编辑

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerAnimator : MonoBehaviour {

    private Animator anim;      // 定义一个变量anim

    // Use this for initialization
    void Start () {
        anim = GetComponent<Animator>();        // 获取角色的animator属性并交由anim变量
    }

    // Update is called once per frame
    void Update () {
        anim.SetFloat("Speed", Input.GetAxis("Vertical"));      // 将键盘W和S的值传给Animation Controller中的Speed变量;
        anim.SetFloat("Turn", Input.GetAxis("Horizontal"));     // 将键盘A和D的值传给Animation Controller中的Turn变量

        // 判断LeftShift键是否按下,然后将值传给Animation Controller中的isRun变量
        if (Input.GetKeyDown(KeyCode.LeftShift))
        {
            anim.SetBool("isRun", true);
        }
        if (Input.GetKeyUp(KeyCode.LeftShift))
        {
            anim.SetBool("isRun", false);
        }
    }
}

四、测试阶段

现在运行一下看看效果;

加载评论
打赏本文
二维码