unity入门小动画(11.Unity动画Animation)

11.动画 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,添加组件后如下图所示:

unity入门小动画(11.Unity动画Animation)(1)

Animation 组件的属性如下:

  • Animation - 默认的动画剪辑
  • Animations - 可以使用的动画剪辑数组
  • Play Automatically - 勾选后会自动播放默认的动画剪辑
  • Animation Physics - 勾选后动画将使用物理循环来驱动
  • Culling Type - 控制动画组件的剔除方式,选项包括:
  1. Always Animate - 即使离开屏幕,动画会一直执行,不会进行动画剔除
  2. BasedOnRenderers - 当渲染不可见时,动画将停止
11.1.2 创建动画剪辑 Animation Clip

选中要创建动画的物体,选择菜单 Window -> Animation -> Animation,打开 Animation 面板,如下图所示:

unity入门小动画(11.Unity动画Animation)(2)

该面板用于创建 Animation Clip。每个动画组件都可以创建多个动画剪辑,单击 Create 按钮后设置保存位置和名称即可创建第一个动画。如下图所示:

unity入门小动画(11.Unity动画Animation)(3)

操作控制:

  • 新建动画剪辑 - 蓝色菜单区域 Create New Clip ...,可以创建新的动画剪辑,也可以选择要编辑的动画剪辑。
  • Preview - 是否开启场景预览模式
  • 红色的圆点 - 是否开启关键帧记录模式
  • 箭头按钮 - 跳到动画剪辑的开头、跳到上一关键帧、播放、跳到下一关键帧、跳到动画剪辑末尾
  • 蓝色菜单区域的右侧按钮 - 筛选、添加关键帧、添加帧事件

动画剪辑的属性:

选中动画剪辑,在 Inspector 视图中可以设置动画剪辑的属性 Wrap Mode,默认情况下只播放一次,可以修改为循环。

11.2 动画制作11.2.1 通过属性制作动画

在 Animation 组件中,动画的制作就是属性的变化,比如:位置属性变化产生的就是移动动画,旋转属性的变化就是旋转动画。

操作步骤:

  1. 单击 Add Property 按钮选择属性并单击属性右侧的加号按钮,此时,在右侧的时间线面板上自动在第 0 秒和第 1 秒处生成两个关键帧,这两个关键帧表示动画剪辑的开头和末尾;
  2. 在时间线上可以单击,单击后出现白色竖线表示当前时间线,此时,可以在左侧修改属性值,修改属性值后会自动生成一个关键帧,也可以通过右击时间轴下方的灰色帧的灰色区域,选择 Add Key 来添加关键帧,然后在关键帧上设置属性值;
  3. 动画剪辑编辑完后,将 Project 视图中的动画剪辑拖拽到物体的 Animation 组件中。

如下图所示:

unity入门小动画(11.Unity动画Animation)(4)

11.2.2 通过曲线控制动画

在 Animation 面板的左侧右下角的按钮 Curves ,单击后即可切换到曲线模式,可以在曲线模式中看到属性的变化和关键帧的位置,如下图所示:

unity入门小动画(11.Unity动画Animation)(5)

在这个曲线编辑器中,可以直接对曲线进行拖拽编辑,单击关键点会出现左右切线操作杆用于改变曲线形状。右击曲线可添加关键帧,右击关键帧后的菜单如下图所示:

unity入门小动画(11.Unity动画Animation)(6)

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("帧事件"); } }

如下图所示:

unity入门小动画(11.Unity动画Animation)(7)

选择关键帧,单击 Add Event,在右侧 Inspector 视图中选择代码上的方法即可。

11.3 动画示例

1.创建一个项目 door

2.选择 Window -> Asset Store,下载并导入 Door Free Pack Aferar(这个资源是多种类型的房门),资源导入后,在 Project 视图中 Assets 文件夹下打开 01_AssetStore/DoorPackFree/Scenes 文件夹,双击 Demo 场景,如下图所示:

unity入门小动画(11.Unity动画Animation)(8)

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 组件的设置如下图所示:

unity入门小动画(11.Unity动画Animation)(9)

运行游戏,单击鼠标右键关门,单击鼠标左键开门。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页