如果不了解Unity编辑器可以先简单看一下往期文章:
Unity中能让游戏物体动起来的技术叫做“动画”。Unity提供两种组件创建动画,一种是(Animator
),另一种是(Animation
);Animation
是旧版Unity动画,下面的教程全部基于新版Animator
进行。
Animator
组件在游戏场景中点击游戏物体后在出现的游戏物体检查器中选择添加组件
。
搜索并选择Animator
组件。
刚添加的Animator
组件如下图所示,其中控制器
是控制动画状态,也是下面重点说明的。Avatar
是动画骨骼,一般用于游戏角色等有肢体运动的游戏物体。
2、添加控制器(可省略)
此步骤可省略,在下一章节创建动画
中通过动画窗口创建动画时会连同创建控制器。
右键项目
窗口,创建动画器控制器
。
刚创建的控制器需要进行命名,随机起一个名称,见名知意即可。双击刚刚创建的控制器,会打开一个动画器
窗口。该窗口用于控制动画与动画之间的状态,暂时还没有任何东西,需要先创建一个动画。
打开动画窗口,窗口-动画-动画
打开。
刚打开的动画
窗口会显示“没有选定可动画对象”,说明我们还没有选择游戏物体,它不知道要为谁创建动画。
我们切换到游戏场景窗口,并选择一个游戏物体,此时动画
窗口就会出现创建
按钮,表示为该游戏物体创建一个动画。点击创建按钮后在弹出的窗口选择动画文件的存储位置并命名即可。
此操作会连同创建一个动画控制器,如果只想创建动画,可以在右键项目栏,在创建-动画
中创建一个动画。
在动画
窗口中点击添加属性
选择当前游戏物体拥有的组件,这里就以Transform
组件的位置来进行示例。
点击动画
窗口左上角的红色小圆点,进行录制动画。同时拖动时间轴上的白线到指定的关键帧处,并在游戏场景中改变游戏物体位置后再次点击红色小圆点完成录制,这样一个简单的动画就录制完成了。
注意看当白线所处的时间轴不同时,小船的位置会随着变更。
再次点击游戏物体,并将刚刚创建的动画控制器拖到Animator
组件上应用。
应用动画控制器
此时运行游戏就可以看到动画效果了。
通过窗口-动画
的方式创建动画时会自动创建动画控制器,所以上面我没有讲控制器的用法。如果你打开刚刚自动创建的动画控制器可以看到如下图所示的界面。
系统自动将刚刚创建的动画WoodBoat
加入到了控制器中,如果当前游戏物体有很多动画,你也可以直接将它拖到控制器画布中,并创建过渡来让动画生效。
过渡通过右键画布中的节点来创建,表示当前动画可以过渡到哪个动画上。比如一个玩家游戏物体同时有跑步、跳跃两个动画,我们就需要将跑步过渡到跳跃动画上,同时跳跃完了之后继续跑步动画。
动画控制器中的Entry
指向的表示当前游戏物体的初始动画。Any State
指向的表示所有动画都可以过渡到当前动画中,而不需要所有动画都创建一个过渡给当前动画。Exit
表示退出动画。
这里以一个老虎的游戏模型举例,它有站立、慢走、跑步三个动画,该游戏物体的动画控制器如下图所示。
通过创建不同的参数,来控制动画生效的时机,点击参数
创建一个Bool
类型的参数,表示当前动画生效条件。
鼠标单击Any State
与run
的连线,并且在检查器中将刚刚创建的IsRunning
参数添加到Conditions
中,表示当前动画激活的条件。
其他的动画也是相同做法。在脚本中通过游戏物体获取动画控制器组件,并通过控制器组件设置控制器组件中的参数值就能控制哪个动画生效了。
下面是C#代码示例:
public Transform npc; // 对外参数
private Animator animator; // 动画控制器组件
void Start(){
// 获取动画控制器组件
animator = npc.GetComponent<Animator>();
}
// 配合其他逻辑就可以自由切换各种动画
void Update(){
// 设置控制器参数值
animator.SetBool("IsWalking", true);
animator.SetBool("IsRunning", false);
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。