Timeline编辑器绘制流程

2024-03-10 05:58

本文主要是介绍Timeline编辑器绘制流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文地址:https://blog.csdn.net/t163361/article/details/114370960
最近准备申请新星创作者,需要2000个粉丝关注,觉得文章有用的,请点一下左侧边栏的关注,谢谢。

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编辑器绘制流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/793265

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

C++/《C/C++程序编译流程》

程序的基本流程如图:   1.预处理        预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。 读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理将所有的“#define”删除,并且展开所有的宏定义处理所有的条件编译指令,如:“#if”、“

笔记本电脑的具体选购步骤流程

2.1 笔记本电脑的具体选购步骤流程   关于笔记本电脑的选购,一直是热点话题。不管是新手还是老前辈,选购前,总是要先上网查一查,汇总一些信息或经验。因为选购一台笔记本电脑,从它的配置、外观到做工等很多方面都需要考量,所以挑一台自己喜欢的、适合自己的笔记本电脑也是一件很费脑筋的事情。本节将一些选购笔记本电脑的经验进行了总结,供广大读者选购笔记本电脑时参考。   笔记本电脑选购流程如下