Unity3d笔记——利用Animator使模型动起来


本篇记录了一个小demo的制作过程,从找模型并下载,到创建Animator,绑定C#脚本,最后实现按下左箭头模型向我们的左边旋转,按下右箭头模型向我们右边旋转的全部过程。希望大家共同学习共同进步。

一. 从Asset Store中下载合适的模型

首先点击菜单栏中的window -> asset store,调出Asset Store面板,如下图。在搜索栏中输入自己想要查找的模型即可。
调出Asset Store面板Asset Store面板
Tips:可在Asset Store选项卡上右键,选择Maximize,如图

在Asset Store选项卡上右键,选择Maximize
在最大化后,可设置筛选选项,我们可以把Price调整为0到0,从而筛选出免费的模型
筛选免费的模型
最后,我找到的是一个免费的机器人模型,叫Kyle,如图,点击Download之后,再点击Import即可。(因为我已经下载好,所以图上直接显示了Import)
下载完的Package一般存放于C:/Users/XXX/AppData/Roaming/Unity/Asset Store/目录中。
免费的机器人模型

二. 为模型创建Avatar

Avatar,它可以实现骨骼和肌肉系统的匹配,从而保证角色在执行动画的时候,角色能够按照预先设定的动画来运动。
在Project面板中,浏览到Robot Kyle目录下的model文件夹,如图,可看到里面的fbx模型文件
fbx模型文件
点击该文件,在它的Inspector面板中,选中Rig选项卡,将Animation Type设为Humanoid,即双足类型的动画,这种类型可以支持大多数的类人形的模型。此外,Lagacy类型用来兼容Unity3D低版本中的模型动画,Generic类型是一种介于人形和非人形的模型之间的通用类型。设置好Humanoid类型后,在下方选择生成Avater的类型为Create Form This Model,即通过当前的模型来生成一个Avater。创建好后,即可看见该模型中,增加了一个Avatar。

Inspector面板模型
点击该Avatar,Inspector面板如图所示,我们可以通过点击Configure进行编辑和查看骨骼绑定是否正确。若无误,点击Done即可。
Inspector面板
Configure

三. 增加AnimatorController文件

如果说Avater是将模型的身体和骨骼实现匹配的接口,那么AnimatorController就是将动画和模型实现绑定的接口。
在Project面板中,相应的位置,右键,添加一个AnimatorController文件,并命名为RobotAnimatorController,如下图
添加AnimatorController文件
双击该文件,会弹出Animator面板,初始状态下,只有Entry,和Any State两个状态,这里会涉及到一个概念:States(动画状态),其实这也就是一个有限状态机,在进入每一个State之前,会有一个判断条件是否进入,当判断条件达到,则满足该状态,进行该状态的动画播放。
Entry(Animator入口)—>DefaultState(默认状态)—>Next State(满足条件的下一个状态)—>Exit(离开状态)

我们在空白位置,右键,新建一个状态,如图所示
新建一个状态
点击该状态,我们在Inspector面板中,可对它进行设置,将其命名为Idle。
Inspector面板
并在Motion中进行动画的绑定。我们可以利用标准资源包Standard Assets中的Characters下的ThirdPersonCharacter,里面自带了很多人物模型的动画。(自己制作动画参见我的另一篇笔记
Standard Assets
ThirdPersonCharacter
点击State的Inspector面板中Motion一行最右边的小圆圈,会自动弹出该项目下所有的动画,选择其中合适的一个即可,我选择的是HumanoidIdle,如图
HumanoidIdle
配置好我们新建的名为Idle的State后,将其设置为默认状态,代表在正常状态下是执行这个State的动画,在Entry状态上右键,选择make Transition,并连接到Idle状态,如图
make Transition
设置好后,一个AnimatorController文件就算制作完成。

四. 将AnimatorController文件与游戏对象相结合

我们将该fbx模型拖拽到hierarchy面板中,即创建了一个游戏对象Object,并能在Scene中观察到它,如图
在这里插入图片描述
点击该游戏对象,在Inspector面板中,我们为其增加一个Animator组件,配置Controller为RobotAnimatorController,Avtar为Robot KyleAvtar,如下图
增加一个Animator组件
最后,点击运行按钮,就可以看到机器人悠闲的动起来了。(因为不会放动态图,就不放了)

五. 利用C#脚本实现按下方向键模型向相应方向旋转

首先,在我们创建的RobotAnimatorController文件中,增加两个State,OnRightArrow与OnLeftArrow,并在Motion处绑定往相应方向旋转的动画,最后将这几个状态连接起来,如下图
RobotAnimatorController
OnRightArrow OnLeftArrow
接下来,我们给这个Animator添加一个状态字:在Animator面板中,选择Parameters选项卡,点击搜索框右边的小加号按钮,选择一个Int类型的状态字,并命名为ActionID,默认值为0,如下图
选择一个Int类型的状态字
然后,我们选中其中一个Transition,就拿Idle->OnLeftArrow这个Transition为例,我们选中它,然后在Inspector面板中的Condition里,增加一个判断条件,参数为ActionID,行为是Equals ,值为1,意思是,当ActionID这个值为1的时候,Animator就会执行从此Transition的源State到此Transition的目标State,即Idle到向我们的左边旋转的状态,两个动画之间的转换过程也可在Settings中进行修改,如图所示
Transition
最后,新建一个C#脚本,实现按下相应方向键,改变ActionID的值,从而触发Animator执行两个不同动画间的转换,代码如下

using UnityEngine;
public class RobotBehaviourScript : MonoBehaviour {
	private Animator m_Animator = null;
	
	// Use this for initialization
	void Start () {
		m_Animator = GetComponent<Animator>();
	}

	// Update is called once per frame
	void Update () {
		if (Input.GetKeyDown(KeyCode.LeftArrow))
			m_Animator.SetInteger("ActionID", 1);
		if (Input.GetKeyDown(KeyCode.RightArrow))
			m_Animator.SetInteger("ActionID", 2);
		if (Input.GetKeyDown(KeyCode.Space) | Input.GetKeyDown(KeyCode.DownArrow))
			m_Animator.SetInteger("ActionID", 0);   
	}
}

至此,这个小demo就算完成啦!

参考博客:https://blog.csdn.net/nizihabi/article/details/48998087

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页