前言
此处略去罗里吧嗦得前言一万字。。。
简单得Slate介绍请看这里
源码结构

- _QuickStartScripts:示例脚本
- Cameras:此工具中定义的相机相关的扩展逻辑
- Characters:没细看过,大概是角色动作混合相关的,类似于IK
- Design:一些数据结构工具相关
- Directables:编辑器具体逻辑
| 关键词 | 说明 |
|---|---|
| Group | 动画组,一个完整的动画组由一个或多个Group组成,每个Group需要指定一个GameObject作为载体 |
| Tracks | 轨道,每个轨道标明了某一类事件的集合 |
| Clip | 片段,在时间轴上的某个(段)时间节点的具体行为集合 |
- Framework: 框架基础核心逻辑
- Paths:曲线相关工具
- Utility:工具类
源码分析
代码节点顺序为:CutScene < Group < Track < Clip ,先看每个结构组成:
- Cutscene : MonoBehaviour, IDirector
- CutsceneGroup : MonoBehaviour, IDirectable
- CutsceneTrack : MonoBehaviour, IDirectable
- ActionClip : MonoBehaviour, IDirectable, IKeyable
Cutscene实现了IDirector,其他三个实现了IDirectable,结合IDirectable中定义的
IDirector root { get; } IDirectable parent { get; } IEnumerable<IDirectable> children { get; }可以看出IDirector是根节点,IDirectable为子节点。那么我猜测后续自行实现编辑器时,只需要实现这两个接口即可。
接下来具体分析四个核心脚本的实现逻辑。
Cutscene
public DirectorGroup directorGroup {
get
{
//DirectorGroup should always be in index 0.
if ( groups.Count > 0 && groups[0] is DirectorGroup ) {
return (DirectorGroup)groups[0];
}
//but if it's not for whatever reason, find it.
return groups.Find(g => g is DirectorGroup) as DirectorGroup;
}
}
一个动画中必然包含一个导演组(DirectorGroup),且导演组不能被删除,可以额外包含N个演员组(ActorGroup)。
– Functions
- Sample: 预览指定帧(秒)
- Validate:重新加载数据树
Group
DirectorGroup
导演组,唯一且不能被移除。
ActorGroup
演员组,属于自定义分组
CutsceneTrack
抽象类,所有Track类的基类
– PropertiesTrack : CutsceneTrack, IKeyable
抽象类,如需修改当前组绑定的GameObject上的某些组件的字段值(如Transform.position、Camera.FieldOfView等),则继承并实现此类。
– AudioTrack: CutsceneTrack
抽象类,如需操作音频相关,请继承并实现此类。
– ActionTrack: CutsceneTrack
抽象类,其他行为类,实现此类以实现各种自定义的行为。
– AnimationTrack: CutsceneTrack
针对Animation组件。
– AnimatorTrack: CutsceneTrack
针对Animator组件
以下见源码中的备注即可
- ActorActionTrack : ActionTrack
- ActorAudioTrack : AudioTrack
- CameraTrack : CutsceneTrack
- VideoTrack : CutsceneTrack
- DirectorPropertiesTrack : PropertiesTrack
Clip
ActionClip : MonoBehaviour, IDirectable, IKeyable
抽象类,Clip基类
- length:virtual,重写该字段可以实现变长的Clip,如图

- blendIn、blendOut:virtual,重写此字段可以对变长的Clip实现渐入渐出,如图

- canCrossBlend:返回True可以使同一轨道上的同类型Clip实现时间轴上的交叉,如图

- info:重写此字段可以改变Clip上的描述文字
- isValid:True启用该Clip
ActorActionClip : ActionClip
ActorActionClip : ActionClip where T : Component
可以附加在ActorTrack上的Clip都继承于此
其余衍生类具体逻辑具体看
Editor
Editor的主体逻辑是在Design/Editor下,部分Inspector逻辑分布在相应逻辑脚本内部或同级目录下的Editor文件夹下。Editor窗口逻辑在CutsceneEditor脚本中。
CutsceneEditor
看起来都是基本的Editor逻辑应用,没啥好解释的。
结束语
基本上Slate逻辑结构就这些,接下来开始针对技能编辑器,进行提取改造成自己需要的东西。
本文介绍了Slate编辑器的源码结构和核心组件,包括Cutscene、Group、Track和Clip,详细解析了它们的接口和功能。通过对IDirector和IDirectable接口的理解,为自定义编辑器提供了实现思路。文章最后提到,将基于Slate的逻辑结构,改造为适用于技能编辑器的需求。
808





