7.Unity 基于Flux制作Act技能编辑器

相关视频 :


Flux是一个类似于TimeLine的轨道动画编辑插件,看过Flux的代码,写得真好,拿来用了。然后再凭借之前写的战斗demo经验做出的Act技能编辑器。目前网上关于技能编辑器的资料比较少,花了很久的时间才做得有点模样,自己摸出来的思路可能不算特别好,给大家参考下。(大概半年后会开源)
技能编辑器分3部分:
1.技能预览, Flux在预览部分基本都做好了,用法和TimeLine类似。
2.技能数据保存。需要将Flux中的序列事件信息保存起来,给技能执行器用。
3.技能事件执行器。核心运行逻辑。
总的来说就是,用Flux做技能预览,然后序列化技能数据,保存帧时间序列。比如动作,特效,位移等等事件。最后是模仿Flux的序列(Sequence)做技能事件执行器。
1.技能预览

Flux的结构是,Sequence→Container→Timeline→Track→Event。一个父容器包含多个子容器。比如Sequence包含多个Container。以此类推,一个Track上放多个Event。
创建流程:创建一个Sequence,在默认容器Container(Default)上, 添加玩家TimeLine,加上动画Track,再加上一段AnimationClip作为动画事件。
同理加上位移事件和播放动画事件,一个简单的技能预览就算做完了,拖动时间轴就可以预览了。
操作起来应该不难,参考我的视频 技能编辑器-初版 的操作。
其次是,想改造这个编辑器得有点编辑器基础。
2.数据保存
Event的主要结构:起始帧Start,结束帧End,以及内容。
如动画事件的内容为AnimationClip,StartOffset(动画偏移) 和 BlendLength(动画混合帧数)

为了序列化数据,AnimationClip则保存Name即可。这样就完成一个事件的保存了。
读取编辑器Sequence数据:

保存结果如上图所示,一个SkillEventData里有,动画事件,位移缩放事件,特效事件,伤害判定事件,子技能事件等等。
其中, SubSkillData是一个List<SkillEventData>,作为子技能们, 子技能和主技能的结构都是SkillEventData。同样拥有动画,位移等事件。一般用于生成的剑气特效。
按第一张图来说,玩家(man_editor)就是主技能,NorAck_1就是子技能。
(数据保存中名字变为: SkillId+_子技能序号 = “NorAck_0_1”)
NorAck_0 的内容是 动画/位移事件+子技能事件
NorAck_0 _1中的内容则为特效事件+伤害触发事件 +位移事件
这样一个技能的内容就算保存完毕了。

3.技能事件执行器,核心运行逻辑
由于Container一般只用一个。所以运行时的逻辑层简化为 :
Sequence→Timeline→Track→Event。
Sequence为主技能和子技能的总和,
Timeline为单个主/子技能,
Track则对应类型EventList(如AnimEvents),
Event则是最小的事件单位。
用伪代码来写,思路是这样的
当所有Event完成时,技能就完成。
具体可以直接看源码
XCEventsRunner (Timeline)
https://github.com/smartgrass/XCSkillEditor_Unity/blob/main/Assets/Scripts/Skill/XCEventsRunner.cs
XCEventsTrack
https://github.com/smartgrass/XCSkillEditor_Unity/blob/main/Assets/Scripts/Skill/XCEventsTrack.cs
XCEvent
https://github.com/smartgrass/XCSkillEditor_Unity/blob/main/Assets/Scripts/Skill/XCEvent.cs
Event层
Event的生命周期有Init,Trigger,Update,Finish,Stop。
当技能帧 t ≥Start时,触发一次Init和Trigger。
当End≥ t ≥Start,则持续执行Update(t)
当t≥End,则是执行Finish和Stop。此时Event便被标记为Finished。
伪代码:
然后通过继承XCEvent实现不同的事件效果
以动画事件为例:
位移事件为例: