【技能编辑器】Slate改造之旅(一)

本文介绍了Slate编辑器的源码结构和核心组件,包括Cutscene、Group、Track和Clip,详细解析了它们的接口和功能。通过对IDirector和IDirectable接口的理解,为自定义编辑器提供了实现思路。文章最后提到,将基于Slate的逻辑结构,改造为适用于技能编辑器的需求。

前言

此处略去罗里吧嗦得前言一万字。。。
简单得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逻辑结构就这些,接下来开始针对技能编辑器,进行提取改造成自己需要的东西。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值