• 游戏
  • 工业
  • 资源
  • 社区
  • 学习
  • 支持
开发
Unity 引擎
为任何平台构建2D和3D游戏
下载计划和定价
商业化
应用内购买(IAP)
发现并管理各商店的IAP
聚合平台
最大化收入并优化变现
Ad Quality
保护您应用的用户体验
Tapjoy
建立长期用户忠诚度
所有变现产品
用户获取
用户获取
被发现并获取移动用户
Unity向量AI
将玩家与合适的游戏连接
Aura设备内广告
在用户高峰参与时触达用户
所有增长产品
使用案例
3D协作
实时构建和审查3D项目
沉浸式培训
在沉浸式环境中培训
客户体验
创建互动3D体验
所有行业解决方案
行业
制造业
实现运营卓越
零售
将店内体验转化为在线体验
汽车
提升创新和车内体验
所有行业
技术库
文档
官方用户手册和API参考
开发者工具
发布版本和问题跟踪器
路线图
查看即将推出的功能
术语表
技术术语库
洞察
案例分析
真实成功案例
最佳实践指南
专家提示和技巧
所有资源
新增功能
博客
更新、信息和技术提示
新闻
新闻、故事和新闻中心
社区中心
讨论
讨论、解决问题和连接
事件
全球和本地活动
社区故事
Made with Unity
展示Unity创作者
直播活动
加入开发者、创作者和内部人员
Unity奖项
庆祝全球的Unity创作者
适合每个级别
Unity Learn
免费掌握Unity技能
专业培训
通过Unity培训师提升您的团队
Unity新手
准备开始
开始您的学习
Unity基础路径
你是Unity 新手?开始您的旅程
使用指南
可操作的技巧和最佳实践
教育
对于学生
开启您的职业生涯
对于教育者
增强您的教学
教育资助许可证
将Unity的力量带入您的机构
认证
证明您的Unity精通
支持选项
获取帮助
帮助您在Unity中取得成功
成功计划
通过专家支持更快实现目标
常见问题解答
常见问题解答
联系我们
与我们的团队联系
计划和定价
语言
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
社交
货币
采购
  • 产品
  • Unity Ads
  • 订阅
  • Unity Asset Store
  • 经销商
教育
  • 学生
  • 教师
  • 机构
  • 认证
  • 学习
  • 技能发展计划
下载
  • Unity Hub
  • 下载存档
  • Beta 版测试
Unity Labs
  • 实验室
  • 作品
资源
  • 学习平台
  • 社区
  • 文档
  • Unity QA
  • 常见问题解答
  • 服务状态
  • 案例分析
  • Made with Unity
Unity
  • 我们公司
  • 新闻简报
  • 博客
  • 事件
  • 工作机会
  • 帮助
  • 新闻
  • 合作伙伴
  • 投资人
  • 附属机构
  • 安防
  • 社会影响力
  • 包容性与多样性
  • 联系我们
版权所有 © 2025 Unity Technologies
  • 法律
  • 隐私政策
  • Cookie
  • 不要出售或分享我的个人信息

“Unity”、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其分支机构在美国及其他地区的商标或注册商标(单击此处获取更多信息)。其他名称或品牌是其各自所有者的商标。

Hero background image

在Unity中构建动画控制器的提示

为方便起见,此网页已进行机器翻译。我们无法保证翻译内容的准确性或可靠性。如果您对翻译内容的准确性有疑问,请参阅此网页的官方英文版本。
请点击这里。

为您的角色创建动画控制器,就像编写脚本一样——使其足够简单,以便在开发周期中重复使用、支持和调试。

下面的所有截图来自Campo Santo制作的Firewatch中角色Henry的动画。

  • 在混合树中隐藏复杂性
  • 将层视为脚本类
  • 重用模式
  • 中心与辐射
  • 共享进入/共享退出模式
  • 临界区和稳定模式
  • 不要在状态机行为中编写复杂代码
  • 使用状态机行为确保动画事件始终触发
  • 更多资源
混合树图像

在混合树中隐藏复杂性

混合树非常适合隐藏复杂性。混合树没有状态,因为它不会回调到代码中。它根据您定义的参数在不同的剪辑之间进行混合。

这意味着您可以在混合树上进行迭代,而不必担心破坏游戏的其余部分。您可以隐藏复杂的状态网络,并防止将来出现错误,因为您无法将行为与混合树中的大多数动画绑定。

动画师状态

将层视为脚本类

将层视为脚本中的类是有帮助的。您希望层中的所有内容都服务于相同的逻辑和行为功能。这是因为每个单独的层控制它覆盖的其他层——无论它是否影响某些骨骼,是否该层是附加的,等等。

重用模式

可重用的逻辑模式在状态机和子状态机中加快了开发速度,便于调试,并且可以减少错误,同时允许多个人制作类似的内容。

以下部分介绍了用于构建层的模式。

中心和辐射动画师

中心与辐射

该模式使调试变得更容易,因为您可以清楚地看到过渡状态的输出和返回到空状态。中心的每个辐射都应该重置它接触的任何状态。

辐射是使用以下模式制作子状态机的理想候选者。

从入口到出口的动画师

共享进入/共享退出模式

通过将状态分组为“引入” – 执行/循环 – “结束”,您可以干净地将任何动画事件或状态机行为附加到引入和结束状态。就像混合树一样,您可以迭代并更改内部执行/循环状态,而不必担心破坏您的游戏。

分段和结束模式

临界区和稳定模式

对于可中断的动画,特别是由玩家输入驱动的动画,将您的剪辑分成两部分。首先,保持一个关键部分,其中包含所有状态变化、效果和必须始终播放到完成的伤害。其次,设计一个结束动画,使您回到闲置状态时看起来不错,并且可以被新的输入中断。

一旦您的动画表现和外观如您所愿,您需要将动画师的状态反馈到游戏的状态中。请参阅以下部分以获取一些关键点。

不要在状态机行为中编写复杂代码

状态机行为是您可以附加到任何动画状态的代码片段。使用它们将行为直接绑定到动画师本身的状态。

避免在其中编写复杂的游戏代码,因为这可能会使您难以追踪状态变化的来源。如果您使用状态机行为来驱动游戏代码,请利用消息系统;与管理类进行交谈,或根据更高层次的参数触发您的代码。

Debug.Break() 是您可以使用的最有效的状态机行为之一。将其附加到您的动画设置中的任何位置,您将拥有类似于可视化脚本系统的断点。

在适当的地方使用C#代码。与其管理数百或数千个过渡,或在各处连接AnyState过渡,不如使用Animator.Play或Animator.CrossFade从代码动态创建直接过渡。如果这仍然无法满足您的控制需求,请查看Unity的Playables API,以获取更多使用代码进行动画的方法。一些示例可以在这里找到。

状态机行为

使用状态机行为确保动画事件始终触发

动画事件将您的动画剪辑的特定时刻与游戏中的特定状态变化联系起来。它们可以用于触发视觉和声音效果等元素。但是,如果您在剪辑被触发之前就过渡出剪辑,那么它将永远不会触发。解决此问题的一种方法是添加一个状态机行为,确保事件在达到特定时间点时始终触发,无论游戏中发生了什么(或没有发生什么)。

更多资源

Unity关键工具和技术艺术家的工作流程

资产商店上的顶级动画

游戏案例研究

免费的Unity电子书和指南