Unity Animation入门

本文详细介绍了如何在Unity中创建和管理动画,包括关键帧的使用、Animator组件的各种更新模式、CullingMode设置、动画录制技巧、动画状态机的控制以及模型动画的导入设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

在unity中动画是非常重要的,有很多难以用代码实现的问题都可以使用动画实现,而且现在版本的unity对动画的效果已经非常完善了,我们可以通过关键帧的方法在unity中就可以实现动画的创建,实现简单的功能,也可以支持很多格式的其它模型动画,导入后可以用动画状态机实现动画的逻辑放。

Unity组件入门篇总目录----------点击导航


Animation:(动画窗口)

打开animation:点击window的animation中的Animation就可以打开动画面板,或者直接按快捷键ctrl+6。( 这里有个小细节,你要选中场景中的物体才可以创建动画的哈,意思是你要为那个物体创建动画,所以要选中一个

Create Animation:创建动画

  点击create就会弹出一个对话框,选择你创建的动画片段保存在哪一个文件夹中。
点击保存就会成功创建一个动画片段
我们可以通过添加关键帧的办法给一个物体添加动画,比如一个物体开始在A位置添加一个关键帧再在时间线的其它位置添加B位置的关键帧,unity就会自动生成一段A到B的关键帧,如果你想在移动过程中发送其它的变化,那就添加跟多的关键帧,添加的关键帧越多,动画看起来就会越接近你想的效果。一般来说如果只两个关键帧,是没法形成一段连续的动画的,unity会自动补齐两个关键帧之间的帧,形成一段连续的动画。

Animator组件:

当为一个物体添加动画的时候,unity会自动为物体添加animator组件,用于动画的控制。
Updata mode:更新模式
  •   Normal :Animator 与 Update 调用同步更新,Animator 的速度与当前时间标度匹配。如果时间标度变慢,动画将通过减速来匹配。
  • Animate Physics :Animator 与 FixedUpdate 调用同步更新与物理系统步调一致。如果要对具有物理交互的对象(例如可到处推动刚体对象的角色)的运动进行动画化,应使用此模式。
  • Unscaled Time :Animator 与 Update 调用同步更新,但是 Animator 的速度忽略当前时间标度而不顾一切以 100% 速度进行动画化。此选项可用于以正常速度对 GUI 系统进行动画化,同时将修改的时间标度用于特效或暂停游戏。
Culling Mode:剔除模式
  •  Alway
### 如何在 Unity创建和使用动画 #### 导入外部 3D 动画剪辑 一种方法是从外部 3D 软件中导出已经制作好的动画,并将其导入到 Unity 中直接使用[^1]。这通常适用于拥有复杂动作的角色模型或其他物体。 对于这种类型的动画,开发者可以在诸如 Blender 或 Maya 这样的软件里完成建模与动画设计工作之后,保存为 FBX 文件格式再拖拽至 Unity 的项目文件夹内。Unity 将自动识别这些资源并允许对其进行配置以便更好地适应游戏环境的需求。 #### 准备工作 为了开始创建新的动画,在启动 Unity 编辑器之前应该先做好一些必要的准备措施[^2]。确保安装了最新版本的 Unity Hub 和对应的编辑器;另外还需要规划好项目的结构以及收集所需的美术资产等资料。 一旦完成了上述步骤就可以新建一个空白场景或者打开现有的项目来进行后续操作了。 #### 使用帧动画作为入门实践 以简单的像素风格角色为例,可以从 Unity 商店下载名为 "Hero Knight - Pixel Art" 的免费资源包[^3]。该套件不仅包含了完整的动画序列还附带了一些实用脚本来帮助初学者快速上手。 要利用此素材实现基本的动作效果,首先要建立一个新的 Unity 工程并将获取来的压缩包解压后放入 Assets 目录下。接着通过右键点击 Project 面板中的 Sprites 文件夹选择 Import New Asset... 来加载图片序列。 接下来就是设置 Sprite Renderer 组件使其能播放连续的画面变化从而形成连贯运动视觉感受的过程: ```csharp using UnityEngine; public class FrameAnimator : MonoBehaviour { public Sprite[] frames; // 图片数组用于存储每一帧图像 private int currentFrameIndex; private float frameDuration = 0.1f; private float timer; void Update() { if (frames.Length == 0) return; timer += Time.deltaTime; if(timer >= frameDuration){ timer -= frameDuration; currentFrameIndex++; if(currentFrameIndex >= frames.Length){ currentFrameIndex = 0; } GetComponent<SpriteRenderer>().sprite = frames[currentFrameIndex]; } } } ``` 这段 C# 代码定义了一个 `FrameAnimator` 类,它会按照设定的时间间隔依次显示不同的精灵图来模拟动画的效果。用户可以根据实际需求调整每张图片之间的切换速度(`frameDuration`)以及其他参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值