TimeLine 的使用说明

2023-10-26

一、关于 TimeLine

Timeline是一套基于时间轴的多轨道动画系统,它支持可视化编辑,实时预览。

这一个技术相对于其他动画系统,最大的区别就是,

Timeline可以针对多个游戏物体做出的一系列动画,主要用于过场动画的制作,实现电影级的那种分镜效果。

二、安装Timeline

打开 Package Manager,安装 TimeLine ,可以通过 Package Manager 进行更新。

三、创建一个 Timeline

点击顶部的导航栏:window - Sequencing - TimeLine , 此时会打开 Timeline 窗口 ,它提示你需要选中一个 GameObject

 在 Hierarchy 视图面板中,选中一个节点, Timeline窗口中会出现一个 Create 按钮

点击 Create 按钮即可创建 Timeline 资源(格式为 .playable ),我将他命名为 :BeforeBattleTimeline.playable
 

我们还会发现,我们选中的物体,自动挂了 Playable Director 和 Animator 组件, 并自动引用了 Timeline 资源
 

四:TimeLine 上的按钮说明
 

1.移动到起始位置按钮,点击这个按钮可以将时间轴移动到最开始的位置

2. 移动到前一帧按钮,将时间轴移动到前一帧

3.播放按钮,点击播放按钮后,会播放Timeline,可以在场景中预览动画效果。快捷键是空格。进入播放模式后:

从当前时间轴所在的位置开始播放,直到最后。如果范围播放按钮启用的话,播放会限定在指定的时间区域内。

时间轴播放时会跟随移动,时间轴的区域会显示当前的时间或者帧数,取决于Timeline 的设置。

4. 点击后移动到下一帧

5. 点击后移到Timeline的最后一帧

6.范围播放按钮 , 启用范围播放按钮后,可以在指定范围内预览播放。注意只能在Timeline窗口中预览时生效,在运行模式下会忽略范围设置。

时间轴上会显示开始和结束的位置,可以拖动开始或结束的小图标来修改范围。

五:时间轴

Timeline窗口中的时间轴显示了当前预览的位置。时间轴上显示了当前的帧数或者时间。此外,滚动条上也有一个小的白竖线,代表了时间轴的位置。如下图所示:

六、各种 Track 介绍,以及使用说明

在 Timeline 窗口左侧栏右键菜单,可以创建多种轨道

轨道 描述

Track Group 将不同的轨道进行分类,相当于文件夹功能

Activation Track 控制物体的显示和隐藏

Animation Track 为物体加入动画,可以在场景中方便地录制动画,也可以是已经制作好的Animation Clip

Audio Track 为动画添加音效,并可对音效进行简单的裁剪和操作

Control Track 在该轨道上可以添加粒子效果,同时也可以添加子Timeline进行嵌套

Signal Track 信号轨道,可以发送信号,触发响应信号的函数调用

Playable Track 在该轨道中用户可以添加自定义的播放功能

添加 track 之前,先选中 BeforeBattle 节点,TimeLine 面板右侧的小锁,点击它 ,锁上它。

Activation Track

这个轨道是控制物体的显示和隐藏, Character_Heavy_Male_Axe 这个节点,在 Active 时间轴内,可见。

Animation Track

在 timeLine 面板上创建 Animation Track 

将物体拖动到 Animation Track 的物体槽中时,如果物体没 有 Animator 组件,会提示为物体挂一个 Animator 组件


然后点击 TimeLine 左边面板的红色按钮,开始录制,记录初始位置坐标信息,我们还可以在轨道上 右键菜单 - Edit in Animation Window,打开 Animation 窗口来编辑动画

 

直接添加动画方式。在 track 上 右键菜单 - Add From Animation Clip,选择美术同事已经制作好的 Animation 动画直接拖入 track 中。 Audio Track

为动画添加音效,并可对音效进行简单的裁剪和操作,选中音效资源,直接拖入

 Control Track

可以用来控制粒子效果,事先制作好的 prefab Rain ,它的 Inspector 面板上,添加了 Particle System 组件,将 Rain Prefab 拖到 Hierarchy 中.

TimeLine 中添加 Control Track ,可以实现控制 Particle 。

 Control Track 

还可以嵌套 TimeLine , 先用 GO 节点创一个 subTimeLine ,后在 BeforeBattleTYimeline 中创建一个 Control Track ,直接将 GO 拖动下来,从而实现 TimeLine 嵌套

Signal Track

可以发送信号,触发响应信号的函数调用

在 Hierachy 中创建一个空物体,命名为 SignalReceiver , 另外在创建一个脚本命名为 SignalTest.cs, 挂到 SignalReceiver 上(会自动绑定挂上 SignalReceiver 组件),用于响应信号

代码如下:

using UnityEngine;
using UnityEngine.Timeline;
[RequireComponent(typeof(SignalReceiver))]
public class SignalTest : MonoBehaviour 
{
    // 信号的响应函数
    public void OnReceiveSignal()
    {
        Debug.Log("OnReceiveSignal: Hello Signal");
    }
}

 SignalReceiver 节点 Inspector 面板上添加 SignalTest.cs 组件,它会自动添加 Signal Receive 组件,

创建 Signal Track 轨道,设置响应物体 在 Timeline 中创建 Signal Track 信号轨道 

 创建信号发射器Signal Emitter

在Project 视图右键菜单选择 - Create - Signal, 创建一个信号发射器资源(Signal Emitter) 命名为:TestSignalEmiter.signal

将信号发射器拖到 track 上, 如图:白色箭头样式
 给信号发射器设置响应函数:点击轨道上的信号发射器,在 Inspector 视图中会显示信号信息,Add Reaction 按钮,添加信号的响应函数

默认信号监听对象就是 SignalReceiver 组件所在的物体
 点击 No Function 可以列出物体上的组件和组件中的所有 public 属性和方法,这里我们设置响应函数为 SignalTest 脚本的 OnReceiverSignal 函数

启动运行工程,时间轴走到 箭头处,发射事件,监听到输出,正常输出。
 

Playable Track

可以添加自定义的播放功能 ,PlayableAsset 和 PlayableBehaviour 脚本 需要写两个类,一个继承 PlayableAsset ,一个继承 PlayableBehaviour

MoveObjPlayableAsset.cs 文件:
 

using UnityEngine;
using UnityEngine.Playables;
public class MoveObjPlayableAsset : PlayableAsset
{
    public GameObject go;
    public Vector3 pos;
    
    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
    {
        var bhv = new MoveObjPlayableBehaviour();
        bhv.go = go;
        bhv.pos = pos;
        return ScriptPlayable<MoveObjPlayableBehaviour>.Create(graph, bhv);    
    }
    
}

 MoveObjPlayableBehaviour.cs 代码如下:
 

using UnityEngine;
using UnityEngine.Playables;

public class MoveObjPlayableBehaviour : PlayableBehaviour
{
    public GameObject go;
    public Vector3 pos;

    public override void OnGraphStart(Playable playable)
    {
        base.OnGraphStart(playable);

        Debug.Log("OnGraphStart=======================");
    }

    public override void OnGraphStop(Playable playable)
    {
        base.OnGraphStop(playable);
        Debug.Log("OnGraphStop=======================");
    }

    public override void OnBehaviourPlay(Playable playable, FrameData info)
    {
        // 这里的逻辑是改变物体的坐标,具体逻辑就看具体需求
        base.OnBehaviourPlay(playable, info);
        Debug.Log("OnBehaviourPlay=======================");
        if (null != go)
        {
            go.transform.position = pos;
        }
    }

    public override void OnBehaviourPause(Playable playable, FrameData info)
    {
        base.OnBehaviourPause(playable, info);
        Debug.Log("OnBehaviourPause=======================");
        if (null != go)
        {
            go.transform.position = Vector3.zero;
        }
    }

    public override void OnBehaviourDelay(Playable playable, FrameData info)
    {
        base.OnBehaviourDelay(playable, info);
        Debug.Log("OnBehaviourDelay=======================");
    }
}

 将 PlayableAsset 拖到轨道上

将 MoveObjPlayableAsset 脚本直接拖动到 PlayableTrack 轨道上,具体的脚本逻辑在 MoveObjPlayableBehaviour 中实现,本例是设置物体的坐标

动态设置 PlayableAsset 参数

现在,我们另外写一个脚本( Runner.cs ),运行的时候动态地给 MoveObjPlayableAsset 设置 GO 对象。

首先我们将轨道名字改成 PlayableTrackTest1 ,因为下面的代码需要通过名字来获取改轨道对象。

把 Runner.cs 脚本挂到 Timeline 物体上,并赋值 Timeline 变量 和 Cube 变量 ,如下

 Runner.cs 代码如下:
 

using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;

public class Runner : MonoBehaviour
{
    public PlayableDirector timelinePlayer;
    public GameObject cube;

    void Start()
    {
        var timeline = timelinePlayer.playableAsset;
        foreach (var binding in timeline.outputs)
        {
            // 轨道名
            var trackName = binding.streamName;
            if ("PlayableTrackTest1" == trackName)
            {
                // 轨道
                var track = binding.sourceObject as TrackAsset;
                // 轨道上的片段,每个片段都是PlayableAsset的子类
                var clipList = track.GetClips();
                foreach (var clip in clipList)
                {
                    if (clip.asset is MoveObjPlayableAsset)
                    {
                        var moveObjPlableAsset = clip.asset as MoveObjPlayableAsset;
                        // 动态设置go对象的坐标
                        moveObjPlableAsset.go = cube;
                        moveObjPlableAsset.pos = new Vector3(-4.91f, 0, 0);
                        break;
                    }
                }
            }
        }
    }
}

 Recorder Track

 直接启动项目就可以录制,Inspector 面板上会显示录制的路径

输出如下
 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TimeLine 的使用说明 的相关文章

  • using UnityEditor引用注意事项

    本文转载自http blog csdn net czlilove article details 19979725 在运行时脚本中使用UnityEditor命名空间 假如该脚本被挂在场景中的物体上 那么 可以这样做 在Unity编辑器中运行
  • 【UGUI】2D头顶血条制作

    前言 近期因为需要制作玩家和敌人头顶的2D血条 查找了很多博客 发现很多都拘束于Canvas的渲染模式必须要设定为ScreenSpace Overlay 还有应该是版本原因 我的是unity2019 1 11f1 用RecttTransfo
  • Unity WebGL错误集锦

    ips 0 Unity的PlayerSettings的otherSettings或者Publish Settings里面的Enable Exceptions里面选择Full StackTrace 可以在打出的包中的浏览器的webgl打印出错
  • UE5学习笔记(一)——界面功能梳理&第一天知识点记录

    学习UE5的第一步 是软件安装 默认是安装好的 由于安装没有太多技术含量 所以就没有专门做记录 这里有个注意点 虚幻引擎是整合在Epic games launcher中的 也就是说开发引擎内嵌在游戏平台上 打个比方 就是如果你要下unity
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • Unity 安卓打包

    Unity打包的方式有很多种 自动打包和手动打包 今天小弟就鼓捣鼓捣unity手动打包 如果想动态打包的话 可以去看其他大佬的帖帖哈 unity打包先配置环境 下载unity的时候可以顺道把unity的安卓包下载下来 如果忘了也没事 可以从
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • Unity-AR 简介

    Unity AR 简介 现有Unity AR Sdk ARKit 苹果推出的AR开发平台 ARCore Google 推出的增强现实 SDK ARFoundation ARFoundation是ARKit XR插件和ARCore XR插件
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • Unity学习笔记(一)—— 基础知识

    一 基础知识 1 开发团队组成 2 unity特点 图形界面 所见即所得 入门简单 支持C 比OC C 更友好 js 国内外资源丰富 因为使用的人多 跨平台性好 PC端 移动端等 对VR AR的支持最完善 3 成功案例 游戏 炉石传说 神庙
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • unity 性能查看工具Profiler

    文章目录 前言 profiler工具介绍 菜单栏 帧视图 模块视图 模块详细信息 通过profiler分析优化游戏性能 最后 前言 每次进行游戏优化的时候都用这个工具查看内存泄漏啊 代码优化啊之类的东西 真的好用 但是之前也就是自己摸索一下
  • unity实现鼠标右键控制视角

    主要实现的功能是相机跟随主角 鼠标右击移动后 相机的视角会旋转 思路 在主角里创建空的子物体 把相机绑在空物体上 通过旋转空物体来实现视角的旋转 要把相机调整到适当位置 代码如下 public float rotateSpeed 100 设
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni

随机推荐

  • IDEA中使用单元测试(Junit)Scanner控制台无法输入问题解决 2022.12.13

    步骤 Help Edit Custom VM options 在idea64 exe vmoptions文件中最后一行添加如下内容 Deditable java test console true 操作完成保存后一定要重启IDEA ps 通
  • Vue中读取本地图片实现预览和上传

    先看效果图 上面展示了两张从本地添加的准备上传服务器的预览图片 效果还不错吧 哈哈哈 下面是该页面中紫色框的布局与实现代码 我想有些人也不喜欢HTML中默认的上传文件样式 实在辣眼睛
  • C\C++ 中的绝对值函数:abs()、cabs()、fabs()、labs()

    不同类型的数据使用不同类型的绝对值函数 整型 int abs int i 返回整型参数i的绝对值 复数 double cabs struct complex znum 返回复数znum的绝对值 双精度浮点型 double fabs doub
  • egg-swagger token验证无效解决方案

    先看效果 注意 我这边只讲重点 1 首先 egg swagger 怎么安装看我的这篇egg swagger demo 无数据库版 2 无swagger的 token 验证 我的这篇eggjs token生成和验证demo 3 我这边只讲 重
  • Raft一致性算法

    摘要 Raft 是一种为了管理复制日志的一致性算法 它提供了和 Paxos 算法相同的功能和性能 但是它的算法结构和 Paxos 不同 使得 Raft 算法更加容易理解并且更容易构建实际的系统 为了提升可理解性 Raft 将一致性算法分解成
  • Prometheus详解(四)——Prometheus简单使用

    今天继续给大家介绍Linux运维相关知识 本文主要内容是Prometheus简单使用 在上文Prometheus详解 三 Prometheus安装部署中 我们介绍了Prometheus的安装和部署 今天 我们就来介绍一下Prometheus
  • fork()父子进程变量之间的关系与信号的响应

    1 变量关系 根据 unix 高级环境编程 中的一句话 子进程和父进程继续执行fork调用之后的指令 子进程是父进程的副本 例如 子进程获取父进程数据空间 堆和栈的副本 注意 这是子进程所拥有的副本 父子进程并不共享这些存储空间部分 父子进
  • 尚品汇细节分析-Vue项目中如何实现自定义校验规则

    需求 当用户登录时 会输入用户名和密码 用户名不能为空 密码的长度不能小于6位 需要在用户在点击登录按钮前 进行验证是否通过我们设定的规则 如果通过则放行 如果不通过则会进行提示 效果图 结合Element UI来实现校验规则 1 页面元素
  • SQL SERVER 2000 遍历父子关系数据的表(二叉树)获得所有子节点 所有父节点及节点层数函数

    SQL SERVER 2000 遍历父子关系數據表 二叉树 获得所有子节点 所有父节点及节点层数函数 Geovin Du 涂聚文 建立測試環境 Create Table GeovinDu ID Int fatherID Int Name V
  • 课程设计-基于Java web的网吧管理系统

    项目编号 B01 项目名称 基于Java jsp Servlet的网吧管理系统 源码编号 BK05 项目类型 Java web项目 JavaEE 当前版本 V1 0 0版本 用户类型 只有管理员 单角色 项目架构 B S架构 设计思想 MV
  • IDEA快捷键(WIN10,持续更新)

    IDEA快捷键 以下所说的都是windows下的默认快捷键 可以通过File gt Settings gt Keymap 对快捷键进行修改 查看源码 ctrl 鼠标左键 重写父类方法 ctrl o 快速写for循环 20 for或fori
  • python给图片加雾

    调用的是cv2的addWeighted函数 增雾结果来看效果还蛮不错的 import numpy as np import cv2 as cv import os import random file C Users Ilearn Desk
  • C++图书管理系统(简单版)

    1 系统需求 图书管理系统是一个可以记录图书借记和存储的工具 本教程主要利用C 来实现一个图书管理系统 系统中需要实现的功能如下 添加书籍 向图书管理系统中添加新书 信息包括 书名 书的价格 书的编号 最多记录1000本 显示书籍 显示图书
  • STC15单片机实战项目 - 硬件调试

    硬件调试 一 调试工具 1 直流电源 测试5 28V供电 2 手机充电线 测试USB供电 程序烧录 3 万用表 测量电压 4 示波器 测量开关波形 纹波等 二 焊接样机 焊接好的样机如下图 说明 作为硬件工程师 平时要多练焊接 练就一流的焊
  • 第二课 什么是norm game?(An Evolutionary Approach to Norms)

    文章目录 前置课程 An Evolutionary Approach to Norms Simulation of the Norms Game first step second step third step fourth step f
  • 【论文笔记】Darts-可微神经架构搜索(一)

    是什么 darts是什么 全称 Differentiable ARchiTecture Search 它是一种新 2018 的NAS 神经架构搜索 方法 NAS是什么 全称 neural architecture search 神经架构搜索
  • JS逆向时碰到了恶心的死代码怎么办?手把手教你解决!

    文章作者 夜幕团队 NightTeam 蔡老板 Loco 润色 校对 夜幕团队 NightTeam Loco 你是否也曾有过 在逆向时看到一大坨代码 但自己却无从下手 的遭遇 你是否也曾有过 跟着代码跳了很久之后 才发现那一大坨代码其实没有
  • MySQL的运行机制是什么?它有哪些引擎?

    目录 整个 SQL 的执行流程 1 查询缓存的利弊 2 如何选择数据库引 3 InnoDB 自增主键 整个 SQL 的执行流程 首先客户端端先要发送用户信息去服务端进行授权认证 如果使用的是命令行工具 通常需要输入如下信息 mysql h
  • 《Flutter入门疑难杂症》 Flutter的UI适配方案

    本文后面已经被我用新的extension大法替代咯 有兴趣的可以看我写的这篇文章 https blog csdn net WZAHD article details 111404843 spm 1001 2014 3001 5501 话不多
  • TimeLine 的使用说明

    一 关于 TimeLine Timeline是一套基于时间轴的多轨道动画系统 它支持可视化编辑 实时预览 这一个技术相对于其他动画系统 最大的区别就是 Timeline可以针对多个游戏物体做出的一系列动画 主要用于过场动画的制作 实现电影级