本文地址:https://blog.csdn.net/t163361/article/details/114370960

19年左右调研Timeline的相关文档

代码结构

整个Timeline主要有如下几个重要的类来组织管理timeline窗口的绘制,数据的创建和保存工作

TimelineWindow

TimelineWindow是Timeline整个编辑器的入口类

负责创建TimelineTreeViewGUI,TimelineTimeArea,SequencePath等必须的组件。

treeView = new TimelineTreeViewGUI(this, state.editSequence.asset, this.get_position());

OnGUI函数是绘制的入口函数

包含初始化,绘制,undo等操作的函数入口,有如下重要的一个调用流程,触发TimelineTreeViewGUI的OnGUI函数

OnGUI()->DoLayout()->SequencerGUI()->TrackViewsGUI()->TracksGUI()->DrawTracksGUI()->treeView.OnGUI()

TimelineTreeViewGUI

管理,绘制Timeline数据

构造函数中会创建TimelineTreeView,TreeViewController,TimelineDataSource等

m_TreeView = new TreeViewController(sequencerWindow, val);m_TimelineTreeView = new TimelineTreeView(sequencerWindow, m_TreeView);m_DataSource = new TimelineDataSource(this, m_TreeView, sequencerWindow);

TimelineTreeView

负责每条Track数据的绘制工作

继承自ITreeViewGUI,实现了BeginRowGUI(),EndRowGUI(),OnRowGUI()等接口

OnRowGUI为每个Track轨道数据的绘制入口

public virtual void OnRowGUI(Rect rowRect, TreeViewItem item, int row, bool selected, bool focused)

函数中传入Rect和TreeViewItem等数据

触发TreeViewItem的Draw函数

timelineTrackBaseGUI.Draw(headerRect, contentRect, m_State, foldoutIndent);

TimelineTrackBaseGUI

本类是个基类,具体的实现在子类TimelineGroupGUI和TimelineTrackGUI中

包含TrackDrawer类型的成员drawer

继承逻辑关系如下

TimelineTrackGUI->TimelineGroupGUI->TimelineTrackBaseGUI->TreeViewItem

TimelineTrackGUI类会在Draw函数中调用drawer来绘制Track轨的数据

此函数中既包括DrawTrackHeader,DrawTrackColorKind,DrawLockState等通用的渲染函数

也包括针对每个Track轨的渲染函数调用

base.drawer.DrawTrack(rect, base.track, timeAreaShownRange, state);

继承TrackDrawer即可针对特定的Track轨进行渲染处理

TrackDrawer

Track的定制绘制基类,可以继承后自定义自己类型的Track绘制

官方实现了如下几个子类

ActivationTrackDrawer

AnimationTrackDrawer

InfiniteTrackDrawer

AudioTrackDrawer

Timeline组织结构图

Track组成

每个Tack轨可由三部分组成,其中*TrackDrawer是可选项,没有的话,会以默认的方式在Timeline窗口渲染

以Animation Track举例

有如下三个脚本

AnimationTrack.cs 此文件在 UnityEngine.Timeline.dll 文件中

继承路径:AnimationTrack->TrackAsset->PlayableAsset->ScriptableObject->Object

负责数据相关的处理。

AnimationTrackInspector.cs 此文件在 UnityEditor.Timeline.dll 文件中

继承路径:AnimationTrackInspector->TrackAssetInspector->Editor->ScriptableObject->Object

看名字就和Inspector的展示有关,本类就不展开讲了

AnimationTrackDrawer.cs 此文件在UnityEditor.Timeline.dll 文件中

继承路径:AnimationTrackDrawer->TrackDrawer->GUIDrawer

实现DrawTrack()函数,可以定制每个Track类型在Timeline绘制

自定义TrackAsset如何修改Timeline上的clip绘制样式

TrackDrawer是一个内部类,无法直接继承

可以使用ILSpy+Reflexil的方式将其暴漏出来,写个子类,即可随意修改了。

下面的代码会覆盖AnimationTrack的默认绘制样式,修改Track轨的高度

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor.Timeline;[CustomTrackDrawer(typeof(UnityEngine.Timeline.AnimationTrack))]
public class TestTrackDrawer : TrackDrawer {public override float GetHeight(UnityEngine.Timeline.TrackAsset t){return 50;}
}

截图

Timeline相关功能速查入口

TimelineWindow.cs Timeline编辑器

TimelineTrackGUI.cs Track轨

—DrawTrackHeader()Track轨头

—m_ItemsDrawer.Draw(trackContentRect, state); clips

------TimelineClipsCUI DrawClip渲染clip

Timeline编辑器绘制流程相关推荐

  1. Android View 绘制流程

    前面讲到 Android View 加载流程,使用 LayoutInflater 将 xml 文件转变成 View ,但是还需要将 View 绘制出来,才能被用户看到,这一过程为绘制流程.由于 And ...

  2. View绘制流程的入口

    View绘制流程的入口是WindowManager.add(decor, l),从Activity的创建开始分析,具体流程如下: Activity.onCreate() setContentView( ...

  3. Android-----View绘制流程以及invalidate()等相关方法分析 .

    引自:http://blog.csdn.net/qinjuning/article/details/7110211 前言: 本文是我读<Android内核剖析>第13章----View工作 ...

  4. Android绘制流程

    一.前言 1.1.C++界面库 MFC.WTL.DuiLib.QT.Skia.OpenGL. Android里面的画图分为2D和3D两种: 2D是由Skia 来实现的,3D部分是由OpenGL实现的. ...

  5. Android中View绘制流程以及invalidate()等相关方法分析

                                                                                                        ...

  6. Android之View的绘制流程解析

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 自定义View在Android中占据着非常重要的地位,因此了解View的 ...

  7. Android源码解析:UI绘制流程之控件绘制

    带着问题看源码 再接再厉,我们来分析UI绘制流程最后一步绘制流程 入口ViewRootImpl.performDraw()方法 private void performDraw() {//...try ...

  8. 【Android 应用开发】UI绘制流程 ( 生命周期机制 | 布局加载机制 | UI 绘制流程 | 布局测量 | 布局摆放 | 组件绘制 | 瀑布流布局案例 )

    文章目录 一. 博客相关资料 及 下载地址 1. 代码查看方法 ( ① 直接获取代码 | ② JAR 包替换 ) 2. 本博客涉及到的源码查看说明 二. Activity 生命周期回调机制 1. An ...

  9. Android视图绘制流程完全解析,带你一步步深入了解View(二)

    在上一篇文章中,我带着大家一起剖析了一下LayoutInflater的工作原理,可以算是对View进行深入了解的第一步吧.那么本篇文章中,我们将继续对View进行深入探究,看一看它的绘制流程到底是什么 ...

  10. android字符显示流程图,Android应用层View绘制流程与源码分析

    1  背景 还记得前面<Android应用setContentView与LayoutInflater加载解析机制源码分析>这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原 ...

最新文章

  1. 资源 | 李飞飞、吴恩达、Bengio等人的15大顶级深度学习课程,你收集全了吗?
  2. 倪光南:中国网络安全为何要强调“自主可控”?
  3. 某大型数据中心离心式冷水机组 控制板UPS电源改造项目案例分享
  4. 我的个人网站更新了!
  5. JavaWeb-综合案例(用户信息)-学习笔记04【删除选中功能】
  6. Codeforces Round #323 (Div. 1) B. Once Again... 暴力
  7. HDU 3062 Party(2-sat题模板+tarjan )
  8. 使用Forge,WildFly Swarm和Arquillian开发微服务
  9. java8与hibernate_Hibernate 使用java8 LocalDateTime 注意事项
  10. 研发工程规范性模型-DevSecOps
  11. RotateMenu简单地旋转菜单控件《IT蓝豹》
  12. 堆积图--MatplotLib
  13. python替换ppt文本_Python操作PPT实现自动查找替换
  14. Python基础之面向对象知识创建一个游戏角色
  15. 科目三考试挂掉原因分析
  16. python绘制五角星
  17. 福寿园首席员工系列报道:一雕一琢 人生定格
  18. 【Unity】场景搭建-天空 山脉 草木 湖泊
  19. word插入图表目录的时候同时插入了原图的解决办法
  20. REW声学测试(五):测试所需设备

热门文章

  1. 小游戏,客户端游戏版号自助申请教程
  2. 可视化导论 - 第三章 数据- 学习笔记
  3. 面试的时候,如何做自我介绍?
  4. 开源引导框架升级发布、懒人神器灰度源码下载
  5. 调用微信支付api实现用户扫描二维码支付订单
  6. 计算机右键括号内的字母,电脑操作中菜单后面括号里的字母的介绍
  7. 袁萌记忆中的华罗庚先生
  8. 猜疑链,区块链,微信群有什么关系?
  9. JavaScript高级学习之彩色小球球
  10. 前5名:Raspberry Pi龙卷风警告系统,用于物联网开发的4个开放式开发板等