rustum 发表于 2022-5-19 17:07

Unity Timeline扩展研究之进阶篇(二)

一、前言

基础篇(一)中介绍了对timeline大体的扩展,本文将会着重优化timeline相关的一些细节,让timeline不仅好用且更美观。走起!
二、具体扩展

这部分内容挺简单的,都是些小细节,就不多说废话了,直接上干货!介绍前先知会下大家,笔者的timeline版本为1.4.8,不同版本略有不同,大家用时注意一下!
2.1上下文菜单优化

关于此部分,主要的优化是自定义菜单的内容。效果如图1,图2,所示。想要做到这个效果很简单,只需要在track子类或者signalEmitter子类上加上特性即可。但光这样是无法实现图1中的分级菜单效果的,如果想加分级菜单还需要在类前加上特性,而MenuCategoryAttribute为内部类,所以大家需要先把它改为public才可以使用,图1中效果举例的代码见图3。



图1 轨道上下文菜单



图2 clip上下文菜单



图3上下文菜单扩展代码

2.2 Track轨道图标优化

效果如图4,给自定义的轨道加一个图标,增加辨识度。方法很简单,只需要在Assets/Gizmos下,放一个png图片,名称为Track类的类型就可以了。举个例子,笔者自定义的UiDynamicEffectTrack类的设置如图5。



图4 轨道图标



图5 gizmoz文件夹展示

2.3关于Clip部分效果的扩展

需要继承ClipEditor,并加上CustomTimelineEditor,经常扩展编辑器的同学应该很容易看懂,以下代码块1为位更改clip名字的案例,效果如图6,可以参考下代码。平常大家可以看看基类可以重载的方法,从而实现更多的效果。
同理也可以扩展Track,如代码段2,只不过基类是TrackEditor。
扩展Signal,如代码段3,只不过基类是MarkerEditor。
代码块1:

class ChangeAlphaAssetEditor : ClipEditor
{
    public override void OnClipChanged(TimelineClip clip)
    {
      if(clip.asset is IDynamicChangeName changeNameClass)
      {
            clip.displayName = changeNameClass.GetChangedName();
      }
    }
}
代码块2:


public class NarratageTrackEditor: TrackEditor
{
      
}
代码块3:

class EventSignalEmitterTimelineEditor : MarkerEditor
{
    public override MarkerDrawOptions GetMarkerOptions(IMarker marker)
    {
      var options = base.GetMarkerOptions(marker);
      EventSignalEmitter emitter = (EventSignalEmitter)marker;
      options.tooltip = emitter.eventType.ToString();
            
      return options;
    }
}



图6 clip改变名称效果

2.4关于检视版部分的扩展

这部分和平常扩展monobehaviour脚本的检视版一样,可以参考下timeline package源码中AnimationTrackInspector等,就不多说了,都是大家扩展编辑器过程中的常规操作。
三、结语

对于经常扩展编辑器的同学来说,本文可能太简单了,对此只能抱歉的说声,打扰了!目前笔者还没有其他好的用于扩展timeline的灵感,本题材先就此打住吧,将来如果有了好的灵感,或者比较骚的玩法在更新(三)!
页: [1]
查看完整版本: Unity Timeline扩展研究之进阶篇(二)