当前位置: 首页 > news >正文

自定义TimeLine

自定义TimeLine

        • 什么是TimeLine
        • Data(数据)
        • Clip(片段)
        • Track(轨道)
        • Mixer(混合)

什么是TimeLine

在 Unity 中,TimeLine(时间轴)是一种用于创建和管理动画序列的工具。它是 Unity 的一个可视化编辑器窗口,用于创建复杂的、时间驱动的动画、剧情和交互式体验。

Timeline 提供了一系列功能和资源,例如轨道(Track)、片段(Clip)、混合器(Mixer),数据(Data)等,用于组织和控制动画序列。你可以在 Timeline 上创建不同类型的轨道,如动画轨道、音频轨道、事件轨道等,然后将相应的片段添加到轨道上,并在时间轴上安排它们的播放顺序和属性变化。简单的可以理解为timeline就是这四个基本组成的。

了解了上述关于TimeLine的基本介绍之后就到了本篇的重点了,如下。我们只要实现这四个部分就是能自定以TImeLine了。

  • Data : 数据

  • Clip : 片段(放在轨道上的一段动画数据或片段)

  • Mixer:混合(将两个片段按照一定的规则进行融合)

  • Track :轨道(clip和Mixer的载体负责管理和组织)

Data(数据)

继承PlayableBehaviour
在这个类中一般我们只放数据,需要注意的是,这个类中存放的仅仅只是一个模板,真正的数据会在Clip中创建。

using UnityEngine.Playables;public class DataBehaviour : PlayableBehaviour
{public Transform exampleValue;
}

Clip(片段)

继承PlayableAsset 并实现ITimelineClipAsset。
注意:我们上面说了data中的是模板而Clip中才是我么珍重要用到的数据。下面的代码有点不好理解。现在把我们的Timeline比作一场演出,Data是存在Clip中的一些变量,我们把Clip当作一个剧本,但是我们要的是一场演出,光有剧本显然是不行的,我们需要把我们的剧本装换位我们想要的演出这个转换就是CreatePlayable。

using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;public class TextDataClip : PlayableAsset,ITimelineClipAsset
{private DataBehaviour template;// 是否需要混合 Clip.None 不需要混合,blending 需要融合public ClipCaps clipCaps => ClipCaps.Blending;//需要把你想要展示的数据暴露出来,不然无法进行引用。public ExposedReference<Transform> exampleValue;// 在这个脚本中 需要理解为什么我们已经有了clip还需要 playable// 因为clip相当于戏的剧本而我们给观众是戏不是剧本,这个时候据需要Create 创建一个playable 作为戏来来演出。// graph 一个可播放图用于管理播放的行为。owner 表示拥有这个可播放对象的游戏对象。public override Playable CreatePlayable(PlayableGraph graph, GameObject owner){// 我们需要一个playable 所以用工厂模式创建一个,graph代表我们是给谁创建,template 是我们的data实例表示把这个template创建为playable,但是我们知道这个Template是一个模板里面是没有数据的所以有了下一步var playable = ScriptPlayable<DataBehaviour>.Create(graph, template);// 我们需要从这个playable上面把clone的data取出来DataBehaviour clone = playable.GetBehaviour();// 因为mono behaviour 可以引用 mono behaviour 也可以引用 assets 但是反过来  assets 不能随意引用monobehaviour 但是可以通过反过来引用那个引用了assets的monobehaviour来引用其他的monobehaviour。// 之后在进行赋值clone.exampleValue = exampleValue.Resolve(graph.GetResolover());return playable;}
}

Track(轨道)

用于组织动画和音频剪辑的容器
继承 TrackAsset 并加上特性。

[TrackColor(0/255f,255/255f,255/255f)] // 轨道的颜色
[TrackBindingType(typeof(GameObject))] // 要绑定的物品的类型是什么,需要给什么物体播放Timeline,可以是一个物体,也可以是一个脚本,或者是一个Aanimator等等
[TrackClipType(typeof(TextDataClip))] // 可以放到这个轨道上的clip是什么类型
using UnityEngine.Timeline;[TrackColor(0/255f,255/255f,255/255f)]
[TrackBindingType(typeof(Transform))]
[TrackClipType(typeof(DataClip))]
public class TextTrack : TrackAsset
{public override Playable CreateTrackMixer(PlayableGraph graph,GameObject go,int inputCount){// var mixerPlayable = ScriptPlayable<CustomMixer>.Create(graph);//这个是被CustomMixer驱动的Playable,mixerPlayable.GetBehaviour() as CustomMixer;就可以获得CustomMixer了//mixerPlayable.SetInputCount(inputCount);//return mixerPlayable;//返回mixerreturn ScriptPlayable<CustomMixer>.Create(graph,inputCount);}
}

Mixer(混合)

Mixer会铺满整条轨道,他并不会知道现在在播放哪一个clip,他会询问在他上面的每一个clip的权重,当播放到某一个clip的时候这个clip的权重就会变成1但是当两个混合的时候 权重的大小就会变成一条斜线

public class CustomMixer:PlayableBehaviour
{public override void OnPlayableCreate(Playable playable){...}public override void OnPlayableDestroy(Playable playable){...}public override void PrepareFrame(Playable playable, FrameData info){...}// 相当于update 会一直更新的public override void ProcessFrame(Playable playable, FrameData info, object playerData){//得到绑定的东西(就是你需要修改的东西)Transform transform =  playerData as Transform;for(int i = 0 ; i < playable.GetInputCount(); i++)//获取轨道上所有的片段{float weight  = playable.GetInputWeight(i);//获取片段在当前帧的片段的权重var clipPlayable = (ScriptPlayable<CustomPlayableBehaviour>)playable.GetInput(i);// 获取当前的 CustomPlayableBehaviour behaviour = clipPlayable.GetBehaviour();//获取CustomPlayableBehaviour...//接下来你可以根据Clip的权重写相应的逻辑(如果你没有在ClipCaps里设置blend的话,应该只有一个片段的权重是1,其他为0)}}//上面4个虚方法是最常用的,OnBehaviourPause不建议使用,不太好掌控(会因为各种原因暂停)。直接根据time值得变化判断是否暂停也挺好得
}

这里自定义TimeiLine就完成了,后面会做一个例子的。

相关文章:

自定义TimeLine

自定义TimeLine 什么是TimeLineData&#xff08;数据&#xff09;Clip&#xff08;片段&#xff09;Track&#xff08;轨道&#xff09;Mixer&#xff08;混合&#xff09; 什么是TimeLine 在 Unity 中&#xff0c;TimeLine&#xff08;时间轴&#xff09;是一种用于创建和管理…...

如何使用SQL系列 之 如何在SQL中使用WHERE条件语句

引言 在结构化查询语言 (SQL)语句中&#xff0c;WHERE子句限制了给定操作会影响哪些行。它们通过定义特定的条件(称为搜索条件)来实现这一点&#xff0c;每一行都必须满足这些条件才能受到操作的影响。 本指南将介绍WHERE子句中使用的通用语法。它还将概述如何在单个WHERE子句…...

leetcode:1941. 检查是否所有字符出现次数相同(python3解法)

难度&#xff1a;简单 给你一个字符串 s &#xff0c;如果 s 是一个 好 字符串&#xff0c;请你返回 true &#xff0c;否则请返回 false 。 如果 s 中出现过的 所有 字符的出现次数 相同 &#xff0c;那么我们称字符串 s 是 好 字符串。 示例 1&#xff1a; 输入&#xff1a;s…...

Echarts 各种点击事件监听

目录 一、鼠标事件1.1、左击1.2、双击1.3、右击1.4、右键双击1.5、中轴滚动二、时间轴2.1、时间轴监听三、拖动3.1、拖动事件一、鼠标事件 1.1、左击 chart.on(click, function(params)...

《智能网联汽车自动驾驶功能测试规程》

一、 编制背景 2018 年4 月12 日&#xff0c;工业和信息化部、公安部、交通运输部联合发布《智能网联汽车道路测试管理规范(试行)》&#xff08;以下简称《管理规范》&#xff09;&#xff0c;对智能网联汽车道路测试申请、审核、管理以及测试主体、测试驾驶人和测试车辆要求等…...

NVIDIA CUDA Win10安装步骤

前言 windows10 版本安装 CUDA &#xff0c;首先需要下载两个安装包 CUDA toolkit&#xff08;toolkit就是指工具包&#xff09;cuDNN 1. 安装前准备 在安装CUDA之前&#xff0c;需要完成以下准备工作&#xff1a; 确认你的显卡已经正确安装&#xff0c;在设备管理器中可以看…...

Elasticsearch、Kibana以及Java操作ES 的快速使用

docker 安装elastic search 、 kibana&#xff08;可视化管理elastic search&#xff09; docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1创建docker自定义网络 docker自定义网络可以使得容器之间使用容器名网络互连&#xff0c;默认的网络不会有这功能。 一定…...

逐鹿人形机器人,百度、腾讯、小米卷起来

长期不温不火的人形机器人产业迎来新风口&#xff0c;技术显著提升、新品层出不穷、资本投资态度也逐渐好转。 8月18日&#xff0c;2023世界机器人大会博览会正式开放&#xff0c;全面展示了机器人行业的新技术、新产品和新应用。据悉&#xff0c;此次展会展览总面积达4.5万平…...

AndroidStudio推荐下载和配置

1、推荐下载链接 Download Android Studio & App Tools - Android Developers 2、gradle配置案例 // Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {maven { url https://maven.aliyun.…...

mysql异常占用资源排查

通过执行日志与连接信息排查 查看是否开启日志记录 mysql> show global variables like %general%; --------------------------------- | Variable_name | Value | --------------------------------- | general_log | OFF | | general_log_file…...

requests 库:发送 form-data 格式的 http 请求 (python)

安装 requests-toolbelt !pip install requests-toolbeltdemo from requests_toolbelt import MultipartEncoder import requestsm MultipartEncoder(fields{query: """第一&#xff0c;向量化匹配是有能力上限的。搜索引擎实现语义搜索已经是好几年的事情了…...

行测图形推理规律(一)元素组成

题库&#xff1a;粉笔网题库 (fenbi.com) 不知道和测评的行测题库是不是一样的&#xff0c;但是总结的规律应该是一样的。 规律并不唯一&#xff0c;题库的答案也只是参考答案&#xff0c;切勿当杠精&#xff0c;你觉得你的规律更合适就别管。本人所归纳的规律仅代表本人想法…...

【python爬虫】13.吃什么不会胖(爬虫实操练习)

文章目录 前言项目实操明确目标分析过程代码实现 前言 吃什么不会胖——这是我前段时间在健身时比较关注的话题。 相信很多人&#xff0c;哪怕不健身&#xff0c;也会和我一样注重饮食的健康&#xff0c;在乎自己每天摄入的食物热量。 不过&#xff0c;生活中应该很少有人会…...

深入理解联邦学习——联邦学习与现有理论的区别与联系

分类目录&#xff1a;《深入理解联邦学习》总目录 作为一种全新的技术&#xff0c;联邦学习在借鉴一些成熟技术的同时也具备了一定的独创性。下面我们就从多个角度来阐释联邦学习和其他相关概念之间的关系。 联邦学习与差分隐私理论的区别 联邦学习的特点使其可以被用来保护用…...

基于Python+DenseNet121算法模型实现一个图像分类识别系统案例

目录 介绍在TensorFlow中的应用实战案例最后 一、介绍 DenseNet&#xff08;Densely Connected Convolutional Networks&#xff09;是一种卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;2017年由Gao Huang等人提出。该网络的核心思想是密集连接&#xff0c;即每…...

旋转图片两种方法

这两种方法在旋转图像时&#xff0c;可能会产生一些不同的效果&#xff1a; rotate_image_new()旋转后的图像完全包含旋转前的内容&#xff0c;并且填充边界尽可能小 rotate_image() 保持原始图像的大小&#xff0c;并根据填充选项决定是否填充边界为白色。如果 if_fill_whit…...

10 mysql tiny/small/medium/big int 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 int 类类型的相关数据的存储 …...

UI自动化测试之Jenkins配置

团队下半年的目标之一是实现自动化测试&#xff0c;这里要吐槽一下&#xff0c;之前开发的测试平台了&#xff0c;最初的目的是用来做接口自动化测试和性能测试&#xff0c;但由于各种原因&#xff0c;接口自动化测试那部分功能整个废弃掉了&#xff0c;其中和易用性有很大关系…...

电视盒子什么品牌好?数码博主盘点目前性能最好的电视盒子

电视盒子是非常重要的&#xff0c;老人小孩基本每天都会看电视&#xff0c;而电视盒子作为电视盒子的最佳拍档销量十分火爆&#xff0c;我自己每个月都会测评几次电视盒子&#xff0c;今天给大家详细解读一下电视盒子什么品牌好&#xff0c;看看目前性能最好的电视盒子是哪些&a…...

对于枚举类型的输出

对于枚举类型的输出 对于枚举类型的输出&#xff0c;您可以使用以下方法&#xff1a;1. 将枚举值转换为整数进行输出&#xff1a;cppODU_TYPE type ODU_TYPE_331;int value static_cast<int>(type);std::cout << "ODU_TYPE: " << value <<…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中&#xff0c;featureAbility是旧版FA模型&#xff08;Feature Ability&#xff09;的用法&#xff0c;Stage模型已采用全新的应用架构&#xff0c;推荐使用组件化的上下文获取方式&#xff0c;而非依赖featureAbility。 FA大概是API7之…...

21-Oracle 23 ai-Automatic SQL Plan Management(SPM)

小伙伴们&#xff0c;有没有迁移数据库完毕后或是突然某一天在同一个实例上同样的SQL&#xff0c; 性能不一样了、业务反馈卡顿、业务超时等各种匪夷所思的现状。 于是SPM定位开始&#xff0c;OCM考试中SPM必考。 其他的AWR、ASH、SQLHC、SQLT、SQL profile等换作下一个话题…...

【Vue】scoped+组件通信+props校验

【scoped作用及原理】 【作用】 默认写在组件中style的样式会全局生效, 因此很容易造成多个组件之间的样式冲突问题 故而可以给组件加上scoped 属性&#xff0c; 令样式只作用于当前组件的标签 作用&#xff1a;防止不同vue组件样式污染 【原理】 给组件加上scoped 属性后…...

在ubuntu等linux系统上申请https证书

使用 Certbot 自动申请 安装 Certbot Certbot 是 Let’s Encrypt 官方推荐的自动化工具&#xff0c;支持多种操作系统和服务器环境。 在 Ubuntu/Debian 上&#xff1a; sudo apt update sudo apt install certbot申请证书 纯手动方式&#xff08;不自动配置&#xff09;&…...

EC2安装WebRTC sdk-c环境、构建、编译

1、登录新的ec2实例&#xff0c;证书可以跟之前的实例用一个&#xff1a; ssh -v -i ~/Documents/cert/qa.pem ec2-user70.xxx.165.xxx 2、按照sdk-c demo中readme的描述开始安装环境&#xff1a; https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c 2…...

Flask和Django,你怎么选?

Flask 和 Django 是 Python 两大最流行的 Web 框架&#xff0c;但它们的设计哲学、目标和适用场景有显著区别。以下是详细的对比&#xff1a; 核心区别&#xff1a;哲学与定位 Django: 定位: "全栈式" Web 框架。奉行"开箱即用"的理念。 哲学: "包含…...