unity入门小动画(11.Unity动画Animation)
在 Unity 中,动画包括 Animation 和 Animator ,它们都是用于控制动画的组件,但它们的工作方式和应用场景不同。
- Animation
Animation是一种比较简单的动画系统,它可以让开发者直接对物体的 Transform、Rotation、Scale 等属性进行关键帧动画编辑。开发者可以通过 Animation 组件将动画剪辑(Animation Clip)和动画控制器(Animation Controller)添加到游戏对象上,实现对其属性的动画控制。Animation 组件适用于制作简单的动画,如角色行走、跳跃等。
- Animator
Animator是一种更为复杂的动画系统,它使用状态机(State Machine)来控制游戏对象的动画。Animator 组件可以将 Animator Controller 添加到游戏对象上,Animator Controller 中包含多个状态(State),每个状态又包含多个动画剪辑(Animation Clip)。在 Animator Controller 中,开发者可以定义不同的状态转换条件和动画播放逻辑,实现更为复杂的动画控制。Animator 组件适用于制作复杂的动画,如角色技能、战斗等。
举例来说,如果你需要制作一个简单的角色行走动画,你可以使用 Animation 组件。你可以在 Unity 编辑器中创建一个 Animation Clip,然后使用关键帧来编辑角色的移动和旋转。将 Animation Clip 和 Animation Controller 添加到角色游戏对象上,然后在代码中使用 Animation 组件来播放动画。这样,当你让角色移动时,动画就会自动播放。
如果你需要制作一个复杂的角色技能动画,你可以使用 Animator 组件。你可以在 Unity 编辑器中创建一个 Animator Controller,然后使用状态机来定义角色的不同状态(如待机、行走、攻击、技能等)。在每个状态中,你可以使用多个 Animation Clip 来定义不同的动画。然后在代码中使用 Animator 组件来控制角色的状态,从而实现复杂的动画效果。
本节介绍简单的 Animation 动画。
11.1 动画组件 Animation动画的创建步骤:
1.为模型添加 Animation 组件(动画组件);
2.通过 Animation 编辑器(Animation Clip 动画剪辑编辑器)修改动画的关键帧;
3.给 Animation 组件应用动画剪辑即可。
11.1.1 动画组件 Animation选中要创建动画的物体,在 Inspector 视图中单击 Add Component -> Miscellaneous -> Animation,添加组件后如下图所示:
Animation 组件的属性如下:
- Animation - 默认的动画剪辑
- Animations - 可以使用的动画剪辑数组
- Play Automatically - 勾选后会自动播放默认的动画剪辑
- Animation Physics - 勾选后动画将使用物理循环来驱动
- Culling Type - 控制动画组件的剔除方式,选项包括:
- Always Animate - 即使离开屏幕,动画会一直执行,不会进行动画剔除
- BasedOnRenderers - 当渲染不可见时,动画将停止
选中要创建动画的物体,选择菜单 Window -> Animation -> Animation,打开 Animation 面板,如下图所示:
该面板用于创建 Animation Clip。每个动画组件都可以创建多个动画剪辑,单击 Create 按钮后设置保存位置和名称即可创建第一个动画。如下图所示:
操作控制:
- 新建动画剪辑 - 蓝色菜单区域 Create New Clip ...,可以创建新的动画剪辑,也可以选择要编辑的动画剪辑。
- Preview - 是否开启场景预览模式
- 红色的圆点 - 是否开启关键帧记录模式
- 箭头按钮 - 跳到动画剪辑的开头、跳到上一关键帧、播放、跳到下一关键帧、跳到动画剪辑末尾
- 蓝色菜单区域的右侧按钮 - 筛选、添加关键帧、添加帧事件
动画剪辑的属性:
选中动画剪辑,在 Inspector 视图中可以设置动画剪辑的属性 Wrap Mode,默认情况下只播放一次,可以修改为循环。
11.2 动画制作11.2.1 通过属性制作动画在 Animation 组件中,动画的制作就是属性的变化,比如:位置属性变化产生的就是移动动画,旋转属性的变化就是旋转动画。
操作步骤:
- 单击 Add Property 按钮选择属性并单击属性右侧的加号按钮,此时,在右侧的时间线面板上自动在第 0 秒和第 1 秒处生成两个关键帧,这两个关键帧表示动画剪辑的开头和末尾;
- 在时间线上可以单击,单击后出现白色竖线表示当前时间线,此时,可以在左侧修改属性值,修改属性值后会自动生成一个关键帧,也可以通过右击时间轴下方的灰色帧的灰色区域,选择 Add Key 来添加关键帧,然后在关键帧上设置属性值;
- 动画剪辑编辑完后,将 Project 视图中的动画剪辑拖拽到物体的 Animation 组件中。
如下图所示:
11.2.2 通过曲线控制动画
在 Animation 面板的左侧右下角的按钮 Curves ,单击后即可切换到曲线模式,可以在曲线模式中看到属性的变化和关键帧的位置,如下图所示:
在这个曲线编辑器中,可以直接对曲线进行拖拽编辑,单击关键点会出现左右切线操作杆用于改变曲线形状。右击曲线可添加关键帧,右击关键帧后的菜单如下图所示:
Delete Key 可删除关键帧
Edit Key 可修改关键帧的具体时间和属性值
其他选项均为曲线操作杆的设置,其中 Broken(中断),是将操作杆断开,断开后可对左切线和右切线分别单独进行设置。
11.2.3 帧事件在动画的某一帧可以触发脚本事件,在事件中可以执行相应的代码,这就是帧事件。
首先创建脚本并把脚本挂载到对象上,然后在动画的关键帧上通过添加帧事件,设置对应代码中的方法即可。
示例:
先创建脚本并挂载到对象,脚本代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeFrame : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
void FrameEvent()
{
Debug.Log("帧事件");
}
}
如下图所示:
选择关键帧,单击 Add Event,在右侧 Inspector 视图中选择代码上的方法即可。
11.3 动画示例1.创建一个项目 door
2.选择 Window -> Asset Store,下载并导入 Door Free Pack Aferar(这个资源是多种类型的房门),资源导入后,在 Project 视图中 Assets 文件夹下打开 01_AssetStore/DoorPackFree/Scenes 文件夹,双击 Demo 场景,如下图所示:
3.在 Hierarchy 视图中选择 Door001/01_low,该物体是第一扇门,选择该物体的 z 轴可以对门进行开关,设置其旋转属性为(-90,0,-180)为该物体添加 Animation 组件。
4.选择 Window -> Animation -> Animation,打开 Animation 面板,单击 Create 按钮创建一个动画剪辑,命名为 Open,单击 Add Property,添加 Rotation 属性。
5.设置 0 秒处的关键帧的 Rotation.z 为 0,1 秒处的关键帧的 Rotation.z 为 -180,保存动画。
6.创建一个新的动画剪辑并命名为 Close,单击 Add Property,添加 Rotation 属性,设置 0 秒处的关键帧的 Rotation.z 为 -180,1 秒处的关键帧的 Rotation.z 为 0,保存动画。
7.创建脚本 DoorController 并挂载到 Door001/01_low 物体上,编写代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DoorController : MonoBehaviour
{
private Animation anim;
private bool isOpen = true;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animation>();
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
// 单击鼠标左键时播放开门动画
if (!anim.isPlaying && !isOpen)
{
isOpen = true;
anim.Play("Open");
}
}
if (Input.GetMouseButtonDown(1))
{
// 单击鼠标右键时播放关门动画
if (!anim.isPlaying && isOpen)
{
isOpen = false;
anim.Play("Close");
}
}
}
}
8.在 Hierarchy 视图中选择 Door001/01_low,在 Inspector 视图中取消勾选 Static 选项。
此时 Animation 组件的设置如下图所示:
运行游戏,单击鼠标右键关门,单击鼠标左键开门。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com