ECS 架构下的动画与技能解耦 Unity 官方提供的 MonoBehaviour + 脚本驱动开发模式,在处理复杂角色行为时容易陷入“脚本臃肿”和“状态机混乱”的困境。《武士 2》课程聚焦于如何基于 Entitas ECS 架构,将角色动作逻辑与底层数据彻底分离。核心痛点在于:传统开发中,技能逻辑、动画触发、碰撞检测往往耦合在同一个组件或脚本里,导致迭代…
Unity 官方提供的 MonoBehaviour + 脚本驱动开发模式,在处理复杂角色行为时容易陷入“脚本臃肿”和“状态机混乱”的困境。《武士 2》课程聚焦于如何基于 Entitas ECS 架构,将角色动作逻辑与底层数据彻底分离。核心痛点在于:传统开发中,技能逻辑、动画触发、碰撞检测往往耦合在同一个组件或脚本里,导致迭代困难。本课程引入 Entitas 作为实体容器,通过 Context 和 Component 的机制,强制要求开发者将“数据”(如生命值、位置)与“系统”(如移动、攻击判定)拆分,从而构建出高内聚、低耦合的游戏逻辑结构。对于希望摆脱 Unity 默认编程惯性、转向系统化架构设计的开发者而言,这是一个极具代表性的实战案例。
课程第二章重点攻克 Animator 状态机的自动化管理难题。在 ECS 体系中,动画控制不应由角色自身脚本硬编码,而应由独立的 Animation System 根据实体属性动态驱动。讲师特别设计了一套操作 Animator 的辅助工具,这不仅是课程亮点,更是工程化思维的体现:它封装了参数设置、状态切换的通用逻辑,大幅减少了样板代码。通过这一工具的实现过程,学习者能深入理解 Animator Controller 在代码层面的映射关系,掌握如何用 System 订阅 Events 来驱动动画过渡,而非手动遍历 Update 循环。这种“工具先行”的开发习惯,能显著提升后续技能系统的扩展效率,避免后期维护时的“技术债”累积。
本课程适合具备 C# 基础、了解 Unity 基本操作,且对 ECS 概念(Entity、Component、System)有初步认知的开发者。入门门槛不高,但需要先理解 EcsArchitecture 的核心思想,否则直接看代码会感到困惑。建议学习顺序如下:首先快速浏览 Entitas 基础文档,熟悉生成代码的结构;接着进入人物技能系统章节,这是验证 ECS 解耦效果的核心环节;随后深入 Animator 辅助工具部分,理解工具背后的设计模式;最后尝试自行扩展一个简单技能,巩固所学。学完本系列后,开发者应能独立搭建一个基于 ECS 的角色动作框架,具备自行扩展新技能、新动画状态的能力。资料包中的源码应与视频同步对照阅读,重点复制并重构其中的 System 模块,亲手实现一次从数据定义到系统执行的完整闭环。不要只看不练,只有当你能脱离视频独立写出一个完整的攻击-动画触发链路时,才算真正掌握了这套架构。
第二季主题:人物技能系统及Animator的使用 本课程使用ECS架构实现武士这个游戏,这一季主要讲解Unity Animator的功能以及人物技能的实现 另外实现了一个操作Animator的辅助工具,可以让操作更加便捷,在制作这个工具的过程中,可以让大家对Aniamtor理解的更加深入! 课程中还会穿插各种优化及编程小知识,希望大家用心听讲哈!
QQ_1763873114141.png (84.04 KB, 下载次数: 0) 2025-11-23 12:46 上传 课程介绍: 第二季主题:人物技能系统及Animator的使用 本课程使用ECS架构实现武士这个游戏,这一季主要讲解Unity Animator的功能以及人物技能的实现 另外实现了一个操作Animator的辅助工具,可以让操作更加便捷,在制作这个工具的过程中,可以让大家对Aniamtor理解的更加深入! 课程中还会穿插各种优化及编程小知识,希望大家用心听讲哈! 课程目录: 000-演示视频.mp4 101-动画状态机讲解.mp4 102-代码创建状态机常见问题.mp4 103-人物技能子状态机.mp4 104-人物技能识别码设计思路.mp4 105-添加人物技能判定系统.mp4 106-修改代码生成工具的问题.mp4 107-添加人物技能计时部分.mp4 108-添加连续按键的判定.mp4 109-有效技能处理部分.mp4 110-技能编码服务.mp4 111-技能编码功能模块.mp4 112-获取当前的技能编码.mp4 113-存储当前技能编码.mp4 114-测试已有部分功能.mp4 115-测试人物技能部分功能(1).mp4 116-测试人物技能部分功能(2).mp4 117-根据需求调整人物行为接口.mp4 118-人物技能部分状态机讲解.mp4 119-状态机脚本讲解.mp4 120-获取技能编码字符串.mp4 121-获取技能编码数值.mp4 122-验证string编码转换函数功能.mp4 123-int编码转换成编码名称函数功能及验证.mp4 124-完成技能参数重置.mp4 125-添加新的动画逻辑.mp4 126-代码控制持刀动作部分.mp4 127-持刀动作和非持刀动作的切换.mp4 128-调整计时器逻辑.mp4 129-处理状态切换遇到的问题.mp4 130-UI轴心点的应用小技巧.mp4 131-技能显示部分UI设置.mp4 132-预制体设置.mp4 133-生成子项部分逻辑.mp4 134-子项缓存.mp4 135-数据组件类.mp4 136-人物技能子项类.mp4 137-完成技能UI显示逻辑.mp4 138-添加游戏内UI控制脚本.mp4 139-自动化生成UI.mp4 140-自动化挂载UI脚本.mp4 141-技能UI功能验证.mp4 142-添加技能编码监听.mp4 143-完善监听部分功能.mp4 144-添加UI渐隐扩展方法.mp4 145-完成Image渐隐渐现效果.mp4 146-完成UI效果的添加.mp4 147-完善计时器接口.mp4 148-优化代码.mp4 149-人物技能部分配置.mp4 150-整理技能判断部分逻辑.mp4 151-调整输入技能部分逻辑.mp4 152-数据服务.mp4 153-添加自己的数据类型.mp4 154-完成技能数据服务部分初始化.mp4 155-筛选当前关卡的有效技能.mp4 156-判定技能编码是否有效.mp4 157-获取有效编码.mp4 158-切记要在信息源头处理信息.mp4 159-在输入部分筛选技能编码.mp4 160-验证已有功能.mp4 161-修复技能编码为0的情况.mp4 162-获取有效编码.mp4 163-Game上下文下技能响应系统.mp4 164-整体检验动画部分功能.mp4 165-动画状态机与代码的不协调性.mp4 166-自定义动画事件设计思路.mp4 167-遍历Animator所有状态.mp4 168-缓存动画状态.mp4 169-添加自定义事件.mp4 170-接口部分的添加.mp4 171-调整事件的绑定方式.mp4 172-行为的判定方式.mp4 173-创建行为状态组件.mp4 174-人物行为状态响应系统.mp4 175-行为状态脚本的结构整理.mp4 176-优化行为接口.mp4 177-调整行为功能.mp4 178-解决Animator脚本对象问题.mp4 179-解决Animator脚本名称问题.mp4 180-解决人物转向突兀问题.mp4 201-刀光特效思路整理.mp4 202-添加刀光部分基础方法.mp4 203-添加监听及加载预制.mp4 204-添加技能开始和结束监听.mp4 205-整理技能部分动画事件系统.mp4 206-完成技能部分脚本名称的修改.mp4 207-添加技能事件调用部分.mp4 208-技能管理类.mp4 209-播放技能部分逻辑.mp4 210-完成技能管理部分.mp4 211-播放技能组件.mp4 212-完成技能动画参数的重置.mp4 213-刀光渐隐渐显效果.mp4 214-完成效果脚本的绑定及调用.mp4 215-unity中一些参数的设置小技巧.mp4 216-完善刀光细节.mp4 217-刀光隐藏部分设计思路.mp4 218-刀光特效部分代码实现.mp4 219-特效初始化部分代码调整.mp4 220-验证调整后的功能.mp4 221-刀光效果调整.mp4 222-灰尘动画的逻辑.mp4 223-灰尘动画效果优化逻辑部分.mp4 224-灰尘动画效果优化效果部分.mp4 225-攻击震动效果设计.mp4 226-攻击震动效果实现及优化.mp4 301-声音部分优化技巧.mp4 302-AssetPostprocessor类介绍.mp4 303-自动设置音频参数.mp4 304-图片导入部分优化技巧.mp4 305-图片导入部分逻辑编写.mp4 306-人物音效部分接口.mp4 307-关于编程的一点小想法.mp4 308-大部分情况下我们说的“接口”是这个意思.mp4 309-音效播放部分逻辑.mp4 310-音效加载部分的逻辑.mp4 311-完善音效部分功能.mp4 312-验证音效部分功能.mp4 313-解决攻击音效执行两次的问题.mp4 314-挥刀声音优化.mp4 315-移动音效功能.mp4 316-移动音效实现.mp4 317-优化脚步声.mp4 401-Git无法识别AnimatorController的修改?看这里!.mp4 402-Animator基础知识.mp4 403-animator状态切换的慢?看这里!.mp4 404-工具存在的意义.mp4 405-animator工具介绍.mp4 406-获取animator当前层的所有状态.mp4 407-移除过渡状态.mp4 408-获取所有子状态机.mp4 409-通过名称获取子状态机.mp4 410-获取子状态机的所有状态.mp4 411-获取指定过渡状态.mp4 412-添加资源界面右键拓展菜单.mp4 413-MenuItem参数之检验函数.mp4 414-MenuItem参数之优先级.mp4 415-工具需求思路.mp4 416-Animator辅助工具.mp4 417-序列化对象及属性.mp4 418-在EditorWindow中显示数组.mp4 419-获取资源中的动画片段.mp4 420-注意!获取动画片段是由坑的.mp4 421-提供资源的另一种选择方式.mp4 422-创建GenerateController.mp4 423-添加动画片段到状态机中.mp4 424-验证已有功能.mp4 425-动画状态的排列.mp4 426-后续需求分析.mp4 427-可排序列表的显示.mp4 428-子状态机数据部分.mp4 429-添加列表的绘制事件.mp4 430-调整视图错误.mp4 431-修改元素的初始化数值.mp4 432-Add回调常见问题.mp4 433-元素列表高度自适应.mp4 434-对话框提示.mp4 435-自定义属性外观类.mp4 436-子属性的外观修改.mp4 437-调整由于样式修改引发的问题.mp4 438-创建子状态机.mp4 439-调整代码结构.mp4 440-完成状态机创建部分逻辑.mp4 441-功能演示及便利操作的设计思路.mp4 442-添加状态机选择复选框.mp4 443-自动添加动画资源快捷操作.mp4 444-重复项筛选.mp4 445-Animator操作辅助面板部分.mp4 446-AnimatorHelpManager.mp4 447-完成添加帮助脚本逻辑.mp4 448-验证功能.mp4 449-辅助工具需求分析.mp4 450-通过名称哈希值获取状态.mp4 451-状态机数据的持久化.mp4 452-通过数据获取状态机.mp4 453-添加获取状态机所有状态的扩展方法.mp4 454-已有辅助功能验证.mp4 455-复选框部分逻辑.mp4 456-显示过渡状态的复选框.mp4 457-编辑器面板数据的保存.mp4 458-全选按钮.mp4 459-优化界面显示.mp4 460-批量修改参数设计思路.mp4 461-添加自己的特性类.mp4 462-添加多选枚举的显示.mp4 463-位运算的基本概念.mp4 464-枚举的位运算.mp4 465-参数部分的显示.mp4 466-确认修改部分逻辑.mp4 467-通过反射同一修改属性值.mp4 468-验证工具修改功能.mp4 469-完善全选按钮逻辑.mp4 470-参数部分的显示控制.mp4 471-编写插件为了让你更懂Animator.mp4 501-结束语:小知识点都在课程的角落里.mp4