一、设计意图
使用Unity中的Timeline功能进行技能效果或者过场剧情开发的都知道,对于Timeline功能的扩展,通常要扩展以下几个类:
- TrackAsset:轨道资源,用来创建片段和Playable混合器,提供序列化数据与Binding。
- PlayableAsset:片段资源,用来创建Playable以及提供序列化数据。
- PlayableBehaviour:逻辑行为,用来实现Playable具体的业务逻辑。
然而,在扩展过程中,会发现一些不便利的情况,最明显的就是PlayableBehaviour的回调函数,对于不熟悉Playable的开发者来说,需要一定的理解成本。为此,我对Timeline的结构进行了进一步的封装。
二、设计思路
对于TrackAsset和PlayableAsset来说,设计上希望它们只是提供具体序列化数据,而屏蔽掉对于Playable的创建过程。而对于PlayableBehaviour来说,希望它仅用于实现业务逻辑,同时提炼回调函数使其友好于普通的Unity游戏开发者,而不需要过多了解Playable的机制。
三、实现方式
1、PlayableBehaviour封装
先来对PlayableBehaviour进行封装,定义BaseBehaviour类,对原有的回调函数使用修饰符sealed,定义通用的回调函数(OnCreate,OnDestroy,OnStart,OnUpdate,OnStop),同时提供一些获取数据的接口(GetData,Time,Duration,Percent)。
全部代码如下:
namespace TimelineKit
{
using UnityEngine.Playables;
public abstract class BaseBehaviour : PlayableBehaviour
{
private bool _started;
private bool _played;
private object _playerData;
private Playable _playable = Playable.Null;
private PlayableAsset _asset;
public static Playable CreatePlayable<T>(PlayableGraph graph, PlayableAsset data) where T : BaseBehaviour, new()
{
var playable = ScriptPlayable<T>.Create(graph);
T behaviour = playable.GetBehaviour();
behaviour._asset = data;