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

Unity Feb 15, 2018 ~

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

资源使用的是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);
        }
    }
}

四、测试阶段

现在运行一下看看效果;

Tags

Weic Ma

没有什么事是一个脑瓜子解决不了的,要是不行就Remove掉你的脑瓜子吧!

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.