【Unity笔记】TimeLine的详细使用介绍

文章目录

  • 前言
  • 素材
  • 一、timeline基础介绍
    • 1. 打开timeline轨道面板
    • 2. 创建TimeLine轨道
    • 3. Timeline常用轨道
    • 4. 修改Timeline单位
    • 5. 锁定界面
  • 二、timeline的通用轨道使用
  • 三、Cinemeachine虚拟相机结合Timeline实现场景移动
  • 四、DialogueTrack:自定义的对话轨道(自己编写代码添加轨道)
    • 1. 自定义轨道四个组成部分
    • 2. 简单的介绍
      • 2.1 新增脚本DialogueTrack
      • 2.2 自定义绑定的对象类型
      • 2.3 自定义每个轨道颜色
    • 3. 简单的使用
      • 3.1 自定义轨道片段和片段行为逻辑(Clip和Behavior)
      • 3.2 定义轨道(Track)
      • 3.3 Timeline面板新建DialogueClip
      • 3.4 设置Clip片段,修改对话的文字
      • 3.5 运行效果
  • 四、Timeline补充注意事项
    • 1. 总述
    • 2. 属性介绍
      • 2.1 Playable(可播放)属性:
      • 2.2 Update Method(更新方法)属性:
      • 2.3 Play on Awake(唤醒时播放)属性:
      • 2.4 Wrap Mode(贴图间拼接方式)属性:
      • 2.5 Initial Time(初始时间)属性:
      • 2.6 Bindings(绑定)属性:
  • 完结

前言

幽默风趣的过场动画,不仅让玩家享受片刻的安宁的同时,也会推进着故事的发展,如今的游戏,不仅仅需要我们去塑造强烈的可玩性,沉浸式的游戏体验,也是每一款优质游戏所追寻的。

从远时代RTS经典冰封王座3、真三国无双系列,近一点,比如火焰文章与后宫们之间的剧情对话、奥德赛的全球追新娘行动、动物森友会、维京纪元、灾厄启示录等等,不同的游戏中,你都能看到过场动画与对话系统的元素,那你是否想在自己的游戏中,添加电影级别的过场动画呢?
在这里插入图片描述

本系列视频将会介绍:如何在Unity运行的过程中触发、以及制作电影级别的(对话系统)过场动画。

先看看本文实现的最终效果
在这里插入图片描述

本文主要是介绍TimeLine的简单使用方法,同时结合Cinemachine演示案例,其中TimeLine是Unity2017以上版本才出现的功能,本文使用的是unity2021版本;

虚拟相机Cinemachine需要手动添加,在Window→PackageManager中添加Cinemachine

对Cinemachine不了解的同学,推荐看看发哥的这篇文章:Unity Cinemachine快速上手,详细案例讲解

素材

素材选择用自己喜欢的就行
https://assetstore.unity.com/packages/3d/animations/zombie-animation-pack-free-150219
在这里插入图片描述

一、timeline基础介绍

1. 打开timeline轨道面板

在这里插入图片描述

2. 创建TimeLine轨道

在场景新建空物体Tiemline,选择物体后再Timeline窗口点击Create创建,选择保存文件位置,到此timeline创建完毕
在这里插入图片描述

3. Timeline常用轨道

右键创建轨道
在这里插入图片描述

  • Activation Track:选择控制在Timeline上何时激活轨道
  • AnimationTrack(动画轨道):允许直接导入动画片段、或者直接再Timeline中重建动画
  • AudioTrack(声音轨道):首先,这个轨道无法再Play模式外预览声音,允许导入现有音频资源片段、做出编辑
  • ControlTrack:可以控制事件相关的游戏对象中的元素,比如例子系统、PlayableDirector组件
  • SignalTrack:将Timeline和外部系统建立通信通道
  • PlayableTrack:允许触发其他Timeline Sequences时间序列
  • CinemachineTrack:允许再Timeline内控制Cinemachine虚拟相机(注意安装了Cinemachine包才会显示)
    常用的主要是Activation、Animation、Audio Track轨道,从场景中拖拽赋值, 时间轴在Active片段之间时,Cube时激活状态,其他时间处于未激活,Animation同样。

4. 修改Timeline单位

默认轨道按帧数单位,可以通过修改为秒单位
在这里插入图片描述

5. 锁定界面

在选择Timeline物体时,在选择拖动其他物体时不小心点到timeline界面会变成选择物体的界面(没有创建),所以在对Timeline操作时可以点击Timeline右上角🔒状态,锁定界面;
在这里插入图片描述

二、timeline的通用轨道使用

前方出现一个游荡的僵尸,先是待机状态,后发现了你,向你移动而来
在这里插入图片描述
在这里插入图片描述

三、Cinemeachine虚拟相机结合Timeline实现场景移动

创建使用虚拟相机
在这里插入图片描述
在Timeline上创建CinemachineTrack轨道,将MainCamera指定给轨道,拖拽CMvcam1到轨道上
在这里插入图片描述

再次创建一个Virtual相机,可以复制CMvcam1,然后改变相机的位置,在拖到轨道上,点击播放按钮预览场景
在这里插入图片描述

此时会发现相机视角是突然的变化,如果想要实现过渡效果,只需要将两个Clip片段部分重合就可以了,具体效果需要结合实际需求
在这里插入图片描述
运行可以看到相机的切换变得平滑了
在这里插入图片描述

四、DialogueTrack:自定义的对话轨道(自己编写代码添加轨道)

越来越多的游戏会通过镜头语言与过场动画,来推动做事的发展,游戏会在玩家不同的游玩时间,给予玩家特定的游戏情绪,或高潮、或平静,把控玩家节奏的同时,将最新的CG技术“炫耀"给所有的玩家,,所以~你是否想在自己的游戏中,快速掌握添加「场景对话」的过渡呢

下面介绍如何通过脚本自定义Timeline过场动画中「对话系统」的内容

1. 自定义轨道四个组成部分

如果要选择自定义轨道的话,要首先了解组成Timeline这一条轨道的四个组成部分

  • The Track(轨道)
  • The Clip(轨道上的资源片段)
  • The Data(DataBehavior行为逻辑,让Clip以Behavior行为逻辑在Track上运行)
  • The Mixer(混合器,处理Clip与Clip之间有交互的、融合叠加的效果)
    在这里插入图片描述

2. 简单的介绍

2.1 新增脚本DialogueTrack

using UnityEngine;
using UnityEngine.Timeline;public class DialogueTrack : TrackAsset {  }

保存之后,你就已经成功了在Track List(轨道列表)当中单击右键,就可以创建我们的自定义【对话轨道】了
在这里插入图片描述
但是你现在还是无法像大多数内置轨道一样,在轨道上单击右键,直接创建出配对轨道的对话Clip片段
在这里插入图片描述

2.2 自定义绑定的对象类型

比如需要绑定Rigidbody刚体

using UnityEngine;
using UnityEngine.Timeline;//设置轨道绑定对象的类型(对话系统包括多个内容(文本框,头像文字等),不需要绑定
//如果只是单纯的字幕,可以绑定Text;
[TrackBindingType(typeof(Rigidbody))]
public class DialogueTrack : TrackAsset { }

效果
在这里插入图片描述

2.3 自定义每个轨道颜色

我们其实还可以为我们自定义的每个轨道,选择自定义的颜色,比如说我们的【动画轨道】是蓝色的,我们的【Cinemachine轨道】是深红色的,通过特性【TrackColor】RGB的数值决定

using UnityEngine;
using UnityEngine.Timeline;[TrackBindingType(typeof(Rigidbody))]
public class DialogueTrack : TrackAsset { }

效果
在这里插入图片描述

3. 简单的使用

3.1 自定义轨道片段和片段行为逻辑(Clip和Behavior)

新建脚本DialogueClip.cs和DialogueBehavior.cs分别继承自PlayableAsset和PlayableBehaviour

using System.Collections;
using UnityEngine;
using UnityEngine.Playables;[System.Serializable]
public class DialogueClip : PlayableAsset
{//pulic修饰才可以在右侧Inspector面板显示public DialogueBehavior template = new DialogueBehavior();//一般都将变量命名为template//继承PlayableAsset的抽象方法public override Playable CreatePlayable(PlayableGraph graph, GameObject owner){//创建并返回Playablevar playable = ScriptPlayable<DialogueBehavior>.Create(graph, template);return playable;}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using TMPro;// 序列化,可以在Inspector面板输入数值
[System.Serializable]
public class DialogueBehavior : PlayableBehaviour
{private PlayableDirector playableDirector;[Header("对话框")]//使用ExposedReference来创建对话场景对象的应用,一般class都用这个创建对象public ExposedReference<Transform> dialog;private Transform _dialog;[Multiline(3)]//定义三行文本框public string dialogStr;//当拥有PlayableBehaviour的Playable被创建时调用。public override void OnPlayableCreate(Playable playable){Debug.Log("调用OnPlayableCreate");playableDirector = playable.GetGraph().GetResolver() as PlayableDirector;}//当拥有这个PlayableBehaviour的PlayableGraph启动时调用。public override void OnGraphStart(Playable playable){Debug.Log("调用OnGraphStart");_dialog = dialog.Resolve(playable.GetGraph().GetResolver());}// 当Playable的状态设置为播放时调用public override void OnBehaviourPlay(Playable playable, FrameData info){_dialog.GetComponent<TextMeshProUGUI>().text = dialogStr;}//类似MonoBrhavior中的Update方法,每一帧都会调用public virtual void ProcessFrame(){Debug.Log("调用ProcessFrame");}//当Playable的状态设置为暂停时调用。这是你可以重置或清理你在OnBehaviourPlay中设置的东西的地方。每执行完一次Clip,调用一次public override void OnBehaviourPause(Playable playable, FrameData info){//重置_dialog.GetComponent<TextMeshProUGUI>().text = "";}
}

3.2 定义轨道(Track)

using UnityEngine;
using UnityEngine.Timeline;//DialogueClip是自定的Clip脚本
//TrackClipType定义哪种类型的Clip片段可以被添加到轨道上去
[TrackClipType(typeof(DialogueClip))]
public class DialogueTrack : TrackAsset { }

3.3 Timeline面板新建DialogueClip

定义完Clip片段以后,在Timeline面板DialogueTrack轨道上右键就可以新建DialogueClip
在这里插入图片描述

3.4 设置Clip片段,修改对话的文字

在这里插入图片描述

3.5 运行效果

在这里插入图片描述

四、Timeline补充注意事项

2Playable Director 组件

1. 总述

Playable Director 组件存储了Timeline实例(Timeline instance)与Timeline资源(Timeline Asset)间的连接。
组件控制着Timeline实例何时播放、如何更新它的时钟(clock),以及Timeline实例播放结束后发生什么。
Playable Director组件还显示关联的Timeline资源(Playable属性)的轨道列表(Bindings属性)。

2. 属性介绍

2.1 Playable(可播放)属性:

使用Playable属性手动将Timeline资源与场景游戏对象关联。
关联操作相当于为选中的Timeline资源创建一个Timeline实例(注意这些关系描述)。
创建Timeline实例后,可以使用Playable Director组件的其他属性来控制实例,并通过Timeline资源选择制作场景中哪些对象的动画。

2.2 Update Method(更新方法)属性:

使用Update Method属性来设置Timeline实例用来更新时间(timing)的时钟源(clock source)。 Update Method支持以下时钟源:

  • DSP Clock:选择用于精确音频采样的样本。 选中后,Timeline实例将使用处理音频的相同时钟源。 DSP代表数字信号处理。【这是一个以秒为单位指定的值,基于音频系统处理的实际采样数,因此比通过Time.time属性获得的时间精确得多】
  • Game Time:选择使用与游戏时钟相同的时钟源。 该时钟源受Time Scale的影响。
  • Unscaled Game Time:选择以使用与游戏时钟相同的时钟源,但不受Time Scale的影响。
  • Manual:选择不使用时钟源,并通过脚本手动设置时钟时间。

2.3 Play on Awake(唤醒时播放)属性:

Play on Awake属性设置Timeline实例是否在游戏开始时就播放。

2.4 Wrap Mode(贴图间拼接方式)属性:

定义Timeline实例播放完成后的行为。 Wrap Mode属性还定义了Timeline编辑窗口处于Play Range模式时的情况。

  • Hold:仅播放一次Timeline实例,保留最后一帧直到播放被中断。
  • Loop:重复播放序列,直到播放被中断。
  • None:播放一次序列,然后将所有被修改的属性重置为播放前的值。

2.5 Initial Time(初始时间)属性:

Initial Time属性定义Timeline实例从时间轴的第几秒开始播放。

2.6 Bindings(绑定)属性:

Bindings属性显示轨道信息及对象绑定信息。

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/65874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

swagger 接口测试,用 python 写自动化时该如何处理?

在使用Python进行Swagger接口测试时&#xff0c;可以使用requests库来发送HTTP请求&#xff0c;并使用json库和yaml库来处理响应数据。以下是一个简单的示例代码&#xff1a; import requests import json import yaml# Swagger API文档地址和需要测试的接口路径 swagger_url …

设计模式之原型模式

文章目录 概述克隆羊问题传统方式解决克隆羊问题传统的方式的优缺点原型模式原理结构图-uml 类图原理结构图说明 原型模式解决克隆羊问题的应用实例原型模式在Spring框架中的应用深入讨论-浅拷贝和深拷贝浅拷贝的介绍深拷贝基本介绍深拷贝应用实例注意事项 概述 原型模式&…

Linux - Docker 安装使用 常用命令 教程

Docker 官方文档地址: Get Started | Docker 中文参考手册: https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are and where you are on your contain…

Linux学习之NAS服务器搭建

NAS是Network Attached Storage的缩写&#xff0c;也就是网络附属存储。可以使用自己已经不怎么使用的笔记本搭建一台NAS服务器。 fdisk -l可以看一下各个磁盘的状态。 可以看到有sda、sdb、sdc和sdd等四块硬盘。 lvs、vgs和pvs结合起来看&#xff0c;sdb和sdc没有被使用。 …

Mac“其他文件”存放着什么?“其他文件”的清理方法

很多Mac用户在清理磁盘空间时发现&#xff0c;内存占用比例比较大的除了有iCloud云盘、应用程序、影片、音频、照片等项目之外&#xff0c;还有一个“其他文件”的项目磁盘占用比也非常大&#xff0c;想要清理却无从下手。那么Mac“其他文件”里存放的是什么文件&#xff1f;我…

文本标注技术方案(NLP标注工具)

Doccano doccano 是一个面向人类的开源文本注释工具。它为文本分类、序列标记和序列到序列任务提供注释功能。您可以创建用于情感分析、命名实体识别、文本摘要等的标记数据。只需创建一个项目&#xff0c;上传数据&#xff0c;然后开始注释。您可以在数小时内构建数据集。 支持…

并发下的Map常见面试题

HashMap 和 HashTable 有什么区别&#xff1f;java中的另一个线程安全的与HashMap极其类似的类是什么&#xff1f;同样是线程安全&#xff0c;它与HashTable在线程同步上有什么不同&#xff1f;HashMap 与 ConcurrentHashMap的区别&#xff1f;为什么 ConcurrentHashMap 比 Has…

开源且强大的网络嗅探分析工具——Wireshark

Wireshark是一款强大的开源网络协议分析工具&#xff0c;旨在帮助用户深入了解网络通信的细节。通过捕获、解析和展示网络数据包&#xff0c;Wireshark能够帮助工程师诊断问题、优化性能&#xff0c;以及解决各种网络难题。无论是深入分析还是快速调试&#xff0c;Wireshark都是…

封装(个人学习笔记黑马学习)

1、格式 #include <iostream> using namespace std;const double PI 3.14;//设计一个圆类&#xff0c;求圆的周长 class Circle {//访问权限//公共权限 public://属性//半径int m_r;//行为//获取圆的周长double calculateZC() {return 2 * PI * m_r;} };int main() {//通…

QT day1登录界面设计

要设计如下图片&#xff1a; 代码如下&#xff1a; main.cpp widget.h widget.cpp 运行效果&#xff1a; 2&#xff0c;思维导图

DEAP库文档教程四——操作与算法

本节将将在初始化的基础上&#xff0c;进一步说明操作与算法。 1、Using the Toolbox toolbox(base.Toolbox())是包含所有进化操作的工具箱&#xff0c;从目标初始化到适应度计算。它允许在每个算法中实现简单的构造。toolbox基本上由两种方法组成&#xff0c;register()和un…

一些自己整理的工具实用参数

工具实用参数 sqlmap -u: 指定需要测试的目标URL&#xff08;格式&#xff1a;http://www.example.com/test.php?id1&#xff09; --cookie: 设置需要发送的 HTTP Cookie&#xff0c;例如&#xff1a;--cookie"sid123456;PHPSESSID654321" --threads&#xff1a;…

Shell脚本练习——系统应用相关

显示系统信息 [rootwenzi data]#cat systemInfo.sh #/bin/bash RED"\E[1;31m" GREEN"\E[1;32m" END"\E[0m" echo -e "$GREEN----------------------Host systeminfo--------------------$END" echo -e "HOSTNAME: $REDho…

Glide的使用及源码分析

前言 依赖 implementation com.github.bumptech.glide:glide:4.16.0 github: GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling 基本使用 //加载url Glide.with(this) .load(url) .placeholder(R.drawable.placehol…

读word模板批量生成制式文件

文章目录 1、Maven依赖2、.docx或.doc格式的word模板准备3、读word模板&#xff0c;批量替换代码域&#xff0c;生成文件&#xff0c;demo4、结果展示 1、Maven依赖 <dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagre…

nnUNet v2数据准备及格式转换 (二)

如果你曾经使用过nnUNet V1&#xff0c;那你一定明白数据集的命名是有严格要求的&#xff0c;必须按照特定的格式来进行命名才能正常使用。 这一节的学习需要有数据&#xff0c;如果你有自己的数据&#xff0c;可以拿自己的数据来实验&#xff0c;如果没有&#xff0c;可以用十…

两个pdf文件合并为一个怎么操作?分享pdf合并操作步骤

不管是初入职场的小白&#xff0c;还是久经职场的高手&#xff0c;都必须深入了解pdf&#xff0c;特别是关于pdf的各种操作&#xff0c;如编辑、合并、压缩等操作&#xff0c;其中合并是这么多操作里面必需懂的技能之一&#xff0c;但是很多人还是不知道两个pdf文件合并为一个怎…

ChatGPT⼊门到精通(4):ChatGPT 为何⽜逼

⼀、通⽤型AI 在我们原始的幻想⾥&#xff0c;AI是基于对海量数据的学习&#xff0c;锻炼出⼀个⽆所不知⽆所不能的模 型&#xff0c;并借助计算机的优势&#xff08;计算速度、并发可能&#xff09;等碾压⼈类。 但我们⽬前的AI&#xff0c;不管是AlphaGo还是图像识别算法&am…

解决Debian系统通过cifs挂载smb后,中文目录乱码问题

解决Debian系统通过cifs挂载smb后&#xff0c;中文目录乱码问题 //$smb_server/share /mnt/nas_share cifs credentials/root/.smbcredentials,iocharsetutf8 0 0默认通过以上命令挂载smb&#xff0c;但是在查看文件目录时&#xff0c;中文乱码 解决问题方式&#xff1a; de…

MR混合现实汽车维修情景实训教学演示

MR混合现实技术应用于汽车维修课堂中&#xff0c;能够赋予学生更加真实&#xff0c;逼真地学习环境&#xff0c;让学生在情景体验中不断提高自己的专业能力。 MR混合现实汽车维修情景实训教学演示具体体现在&#xff1a; 1. 虚拟维修指导&#xff1a;利用MR技术&#xff0c;可…