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

news2024/11/22 5:29:13

文章目录

  • 前言
  • 素材
  • 一、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)
    {
        //创建并返回Playable
        var 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.coloradmin.cn/o/936863.html

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

相关文章

JVM第三篇 运行时数据区-虚拟机栈和PC程序计数器

目录 1. JAVA中的线程 2. 栈区 2.1 栈帧 2.2 栈可能出现的异常 2.3 设置栈大小 3.程序计数器&#xff08;PC&#xff09; 4. PC和栈发挥的作用 5. 关于栈的常见面试题 虚拟机包含三大部分&#xff0c;类加载子系统&#xff0c;运行时数据区&#xff0c;执行引擎。运行时…

基于亚马逊云科技无服务器服务快速搭建电商平台——性能篇

使用 Serverless 构建独立站的优势 在传统架构模式下&#xff0c;如果需要进行电商大促需要提前预置计算资源以支撑高并发访问&#xff0c;会造成计算资源浪费并且增加运维工作量。本文介绍一种新的部署方式&#xff0c;将 WordPress 和 WooCommerce 部署在 Amazon Lambda 中。…

C++信息学奥赛1149:最长单词2

#include <iostream> #include <string> using namespace std; int main() {string str1;// 输入一行字符串getline(cin,str1);int n0;string MaxArr"";string MinArrstr1;string arr"";for(int i0;i<str1.length();i){if(str1[i] or str1…

电阻器件的分类

电阻器的种类碳膜电阻膜式电阻器中的一种。气态碳氢化合物在高温和真空中分解&#xff0c;碳沉积在瓷棒或者瓷管上&#xff0c;形成一层结晶碳膜。改变碳膜厚度和用刻槽的方式变更碳膜的长度可以得到不同的阻值。碳膜电阻成本较低&#xff0c;电性能和稳定性较差&#xff0c;一…

Win 11 电脑的 Win + E 快捷键失效

报的错误信息如下&#xff1a; 该文件没有与之关联的应用来执行该操作。请安装应用&#xff0c;若已经安装应用&#xff0c;请在”默认应用设置"页面中创建关联。 报错原因&#xff1a;系统注册表被改写了导致的出错 解决办法&#xff1a; 1、首先&#xff0c;按键盘上…

【Linux】以太网协议以及MTU

以太网协议 数据链路层的功能以太网的数据格式MTUMTU对IP协议的影响MTU对UDP协议的影响MTU对TCP协议的影响 数据链路层的功能 数据链路层的主要功能是&#xff1a;控制链路。包括数据链路的建立、链路的维护和释放。MAC寻址也是它的功能&#xff0c;寻址是指计算机网卡的MAC地…

算法通过村第四关-栈青铜笔记|手写栈操作

文章目录 前言1. 栈的基础概要1.1 栈的特征1.2 栈的操作1.3 Java中的栈 2. 栈的实现&#xff08;手写栈&#xff09;2.1 基于数组实现2.2 基于链表实现2.3 基于LinkedList实现 总结 前言 提示&#xff1a;我自己一个人的感觉很好 我并不想要拥有你 除非你比我的独处更加宜人 --…

低代码与低代码平台的概念解析

随着数字化转型和软件需求的不断增长&#xff0c;传统的手写代码开发方式已经无法满足迅速推出应用程序的需求。为了加快软件开发的速度并降低技术门槛&#xff0c;低代码开发模式应运而生。本文将介绍低代码的概念&#xff0c;探讨什么是低代码什么是低代码平台&#xff1f; 一…

JAVA中如何知道某项目使用什么数据库类型

文章目录 1. 前言2. 先说结论3. 代码案例 1. 前言 最近在写第三方工具的时候&#xff0c;需要判断使用方项目具体使用了什么数据库类型&#xff0c;从而进行不一样的实现逻辑。当然可以让用户在YML中配置说明项目用什么数据库&#xff0c;但用户不一定填写正确。因此需要想其他…

华为OD机试 - 求满足条件的最长子串的长度 - 双指针(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

day-03 基于TCP的服务器端/客户端

一.理解TCP和UDP TCP&#xff08;Transmission Control Protocol&#xff09;和UDP&#xff08;User Datagram Protocol&#xff09;是两种常见的传输层协议&#xff0c;用于在计算机网络中提供可靠的数据传输。 1.TCP&#xff1a; 连接导向&#xff1a;TCP是一种面向连接的…

麦淘商城系统 商城系统源码 电商系统源码 分类商城网站系统源码

麦淘商城系统 商城系统源码 电商系统源码 分类商城网站系统源码 麦淘商城系统源码 | 提供完整可定制的电商解决方案 电商系统源码 商城网站系统源码

【C++笔记】C++之类与对象(下)

【C笔记】C之类与对象(下&#xff09; 1、再看构造函数1.1、构造函数的初始化列表1.2、C支持单参数的构造函数的隐式类型转换1.3、匿名对象 2、Static成员2.1、为什么要有静态成员变量&#xff1f;2.2、一个类的静态成员变量属于这个类的所有对象2.3、静态成员函数 3、友元3.1、…

围棋与育种

最近因为娃子报名了围棋课&#xff0c;我本着交一次课学两个人的态度&#xff0c;入门围棋&#xff0c;买了些书&#xff0c;听了些课&#xff0c;有所得。学了两个多月&#xff0c;现在6级水平&#xff0c;了解了基本的攻杀技巧&#xff0c;会判断输赢。 下面截图是今天的一盘…

Kotlin协程flow的debounce参数timeoutMillis特性

Kotlin协程flow的debounce参数timeoutMillis特性 <dependency><groupId>org.jetbrains.kotlinx</groupId><artifactId>kotlinx-coroutines-core</artifactId><version>1.7.3</version><type>pom</type></dependency&…

[笔记] 阿里云域名知识

文章目录 前言一、域名二、域名常见分类2.1 泛域名2.2 为什么要设置子域名 三、记录类型3.1 A- 将域名指向一个PV4地址3.2 CNAME- 将域名指向另外一个域名3.3 AAAA- 将域名指向一个PV6地址3.4 MX- 将域名指向邮件服务器地址3.5 SRV- 记录提供特定的服务的服务器使用场景 3.6 TX…

【C++】5、构建:CMake

文章目录 一、概述二、实战2.1 内部构建、外部构建2.2 CLion Cmake 一、概述 CMake 是跨平台构建工具&#xff0c;其通过 CMakeLists.txt 描述&#xff0c;并生成 native 编译配置文件&#xff1a; 在 Linux/Unix 平台&#xff0c;生成 makefile在苹果平台&#xff0c;可以生…

PCB设计常见问题

Fill Mode中存在3个选项 Solid&#xff08;Copper Regions&#xff09; Hatched&#xff08;Tracks/arcs&#xff09; None&#xff08;outlines&#xff09; 区别Solid&#xff08;Copper Regions&#xff09;过大电流的能力更强&#xff0c;且对于电路板存在的分布电容的干扰…

为什么学嵌入式还要学单片机和人工智能?

从企业用人需求的角度来看&#xff0c;许多企业在招聘嵌入式工程师时都希望其具备一定的技能要求。其中&#xff0c;熟悉STM32单片机开发、熟悉嵌入式Linux开发以及熟悉实时操作系统开发&#xff0c;如FreeRTOS等&#xff0c;是常见的要求。掌握这些技术点的课程将为学生提供更…

Linux之iptables防火墙

目录 一.网络安全技术 二.防火墙 2.1.防火墙分类 2.2.iptables工具简述 2.3.iptables基本语法 2.4.控制类型 2.5.查看规则 2.6.添加规则 2.7.黑白名单 2.8.根据规则编号删除 清空 替换规则 2.9.默认策略 2.10.隐藏扩展模块 2.11.显示扩展模块 三.iptables保存规则…