Unity Timeline的使用

2023-11-11

创建TimeLine

第一种方法:在Assets目录下,右键Create—>TimeLine,
双击创建的TimeLine文件,就可以打开TimeLine窗口
在这里插入图片描述

第二种方法
找到右上角的菜单Window
在这里插入图片描述
找到Sequencing—>TimeLine
打开TimeLine窗口
由于TimeLine必须依附于一个游戏对象上的Playable Director组件,所以创建一个空物体,并选中它,点击TimeLine窗口中的Create
在这里插入图片描述
系统会自动为这个空物体挂载Animator和Playable Director组件
在这里插入图片描述
将TimeLine窗口中的TimeLine_Obj(Animator)删掉,我们不需要它(后面其实也可以自己创建)

ActivationTrack

用来设置物体的激活状态

只要动画播放到ActivationTrack的轨道上,物体就会被激活,在这之外全部为失活状态
如图,用Cube做例子
在这里插入图片描述

在这里插入图片描述
点击选中ActivationTrack的这条轨道,Inspector面板上其实是可以对动画播放之后的处理进行设置的
在这里插入图片描述
在这里插入图片描述
Active:设置为激活的(active=true),当Timeline资源播放完后,物体始终会保持激活状态(运行之后才能看到效果)。

Inactive :播放Timeline完后,设置为非激活(active=false)。

Revert :在Timeline播放完后,GameObject.active=播放前的GameObject.active的去反值。
也就是说,播放TimeLine之前是激活的,播放完后就是失活的(active=false)

Leave As Is: 设置active的状态是依赖Timeline资源播放完后active的值是什么就保持为什么。
例如,Timeline播放完后物体是失活的(active=false),那么物体就就保持为失活状态了(active=false)。

Animation Track

动画轨道,必须依附于Animator才能使用
创建一个Sphere球体,并给它挂载Animator
通过Animation录一段简单的位移动画
在这里插入图片描述
我录了一段上下位移的动画,命名为Sphere_Jump
在这里插入图片描述
在TimeLine中创建一个AnimationTrack,将刚刚的Sphere拖进去,因为Sphere上带有Animator,可以直接赋值,然后将刚刚录制的动画片段拖到轨道上
在这里插入图片描述
在这里插入图片描述
播放后,在Sphere跳起的过程中,Cube会被激活

Playable Track

可播放轨道,可以用来执行C#脚本中的方法
但是不同于Animtion中的事件,写法不同

我们需要两个成对的脚本,缺一不可,一个是
PlayableAsset
PlayableBehaviour
我们要用来执行的脚本,必须要继承这两个类
我们可以直接在Asset文件夹下右键
Create—>Playables分别创建这两个脚本
我这里命名为:
TimeLineEvent_Asset.cs
TimeLineEvent_Behaviour.cs

代码内容分别为:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

[System.Serializable]
public class TimeLineEvent_Asset : PlayableAsset
{
    // Factory method that generates a playable based on this asset
    public override Playable CreatePlayable(PlayableGraph graph, GameObject go)
    {
        return Playable.Create(graph);
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

// A behaviour that is attached to a playable
public class TimeLineEvent_Behaviour : PlayableBehaviour
{
    // Called when the owning graph starts playing
    public override void OnGraphStart(Playable playable)
    {
        
    }

    // Called when the owning graph stops playing
    public override void OnGraphStop(Playable playable)
    {
        
    }

    // Called when the state of the playable is set to Play
    public override void OnBehaviourPlay(Playable playable, FrameData info)
    {
        
    }

    // Called when the state of the playable is set to Paused
    public override void OnBehaviourPause(Playable playable, FrameData info)
    {
        
    }

    // Called each frame while the state is set to Play
    public override void PrepareFrame(Playable playable, FrameData info)
    {
        
    }
}

这里来写一个简单的功能

创建一个Capsule胶囊体,通过TimeLine来改变它的颜色

将TimeLineEvent_Behaviour .cs中的代码进行精简后,编写如下,在播放的时候将胶囊体的材质设置为红色,暂停为白色

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

// A behaviour that is attached to a playable
public class TimeLineEvent_Behaviour : PlayableBehaviour
{
    public GameObject target;
    // Called when the state of the playable is set to Play
    public override void OnBehaviourPlay(Playable playable, FrameData info)
    {
        target.GetComponent<MeshRenderer>().material.color = Color.red;
    }

    // Called when the state of the playable is set to Paused
    public override void OnBehaviourPause(Playable playable, FrameData info)
    {
        target.GetComponent<MeshRenderer>().material.color = Color.white;
    }

}

TimeLineEvent_Asset.cs中编写代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

[System.Serializable]
public class TimeLineEvent_Asset : PlayableAsset
{
    //这是为了设置TimeLineEvent_Behaviour 中的target属性的值
    public ExposedReference<GameObject> target;
    // Factory method that generates a playable based on this asset
    public override Playable CreatePlayable(PlayableGraph graph, GameObject go)
    {
        var p = ScriptPlayable<TimeLineEvent_Behaviour>.Create(graph);
        //获取面版上的赋值
        p.GetBehaviour().target = target.Resolve(graph.GetResolver());
        return p;
    }
}

在这里插入图片描述
在TimeLine窗口上右键创建Playable Track,再点击旁边的三个点,选择TimeLine_Event_Asset,其他的是我之前写的,不用在意
在这里插入图片描述
创建之后,选择轨道上的片段
在这里插入图片描述
右侧会出现我们刚刚写的暴露出来的Target,这个其实就是
在这里插入图片描述
将创建的胶囊体拖拽过去
在这里插入图片描述
播放TimeLine
在这里插入图片描述
当播放到Playable Track上的片段时,胶囊体就变成了红色
在这里插入图片描述
但是,这样并不方便我们对动画进行调试,有时候我们想要在物体身上挂载脚本然后进行调试,这时候,需要加入第三个脚本
TrackAsset

创建一个继承MonoBehaviour的脚本,实现一个功能,将一个列表中的所有物体全部变成红色

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TimeLineEvent_Mono : MonoBehaviour
{
    public List<GameObject> objs = new List<GameObject>();

    public void SetObjColor(bool isRed)
    {
        for (int i = 0; i < objs.Count; i++)
        {
            if(isRed)
            {
                objs[i].GetComponent<MeshRenderer>().material.color = Color.red;
            }
            else
            {
                objs[i].GetComponent<MeshRenderer>().material.color = Color.white;
            }
            
        }
    }
    
}

创建一个类继承TrackAsset

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;
//这个一定要是继承PlayableAsset的类
[TrackClipType(typeof(TimeLineEvent_Asset))]
//这个一定是继承MonoBehaviour的类
[TrackBindingType(typeof(TimeLineEvent_Mono))]
public class TimeLineEvent_Track : TrackAsset
{
    public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount)
    {
        return ScriptPlayable<TimeLineEvent_Behaviour>.Create(graph, inputCount);
    }

}

将TimeLineEvent_Asset脚本进行修改

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

[System.Serializable]
public class TimeLineEvent_Asset : PlayableAsset
{
    public ExposedReference<TimeLineEvent_Mono> target;
    // Factory method that generates a playable based on this asset
    public override Playable CreatePlayable(PlayableGraph graph, GameObject go)
    {
        var p = ScriptPlayable<TimeLineEvent_Behaviour>.Create(graph);
        p.GetBehaviour().target = target.Resolve(graph.GetResolver());
        return p;
    }
}

对TimeLineEvent_Behaviour进行修改

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;

// A behaviour that is attached to a playable
public class TimeLineEvent_Behaviour : PlayableBehaviour
{
    //public GameObject target;
    public TimeLineEvent_Mono target;
    // Called when the state of the playable is set to Play
    public override void OnBehaviourPlay(Playable playable, FrameData info)
    {
        target.SetObjColor(false);
    }

    // Called when the state of the playable is set to Paused
    public override void OnBehaviourPause(Playable playable, FrameData info)
    {
        target.SetObjColor(true);
    }

}

保存后,回到TimeLine窗口(最好关闭TimeLine窗口再打开,有时候不会刷新),右键会多了一个TimeLineEvent_Track的选项,选中它
在这里插入图片描述
在这里插入图片描述
这个时候就可以将挂载TimeLineEvent_Mono 的物体拖入进去了
在场景中创建一个空物体,和4个胶囊体,在空物体上挂载TimeLineEvent_Mono 脚本,将四个胶囊体拖入列表中,
在这里插入图片描述
将Test物体拖入到TimeLine中
再将Test拖入到轨道上
在这里插入图片描述
播放后,播放到相应片段上胶囊体变白,其他时候是红色的
在这里插入图片描述
在这里插入图片描述

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

Unity Timeline的使用 的相关文章

随机推荐

  • 经典算法题收集一

    1 题目一 有 n个人围成一圈 顺序排号 从第一个人开始报数 从 1 到 3 报数 凡报到 3 的人退出圈子 问最后留下的是原来第几号的那位 其实这是一个约瑟夫环问题 这个问题最本质其实就是循环链表的问题 围成一个圈之后 报数即是循环链表的
  • Oracle小数连接字符串时开头的0不见的问题

    小数在连接成字符串的时候 如果小数的开头是0 几的话 前面的 0 会被省略掉 在excel中也有这个特点 具体是为什么不清楚 如 select 0 8 from dual 结果 8 可以用下面的方式避免 防止导致查询到的最终结果不合适 se
  • leetcode分类刷题:基于数组的双指针(四、小的移动)

    leetcode上有些题是真的太难了 正常读题之后完全想不到要用双指针来求解 本次博客总结的题目是双指针初始时位于数组两端 哪个元素小就移动哪个指针 11 盛最多水的容器 1 这道题放在42 接雨水的相似题目里 可能是因为它们都有相似的双指
  • Android 10.0系统启动之init进程-[Android取经之路]

    原文链接 https blog csdn net yiranfeng article details 103549394 摘要 init进程是linux系统中用户空间的第一个进程 进程号为1 当bootloader启动后 启动kernel
  • CTFshow 击剑杯 部分WP

    摆烂了摆烂了 太难了 聪明的师傅已经组队打起月赛了 试试能不能苟住前5 苟住了 复现的后面再补充吧 文章目录 1 Misc 中文识别带师 2 Web 简单的验证码 easyPOP 3 Pwn pwn01 My sword is ready
  • FOX算法的MPI实现

    算法描述如下 将待相乘的矩阵A和B分成p个方块Ai j和Bi j 0 j i p 1 每块大小为 n p n p 并将他们分配给 p p 个处理器 开始时处理器Pi j存放有Ai j和Bi j 并负责计算块Ci j 然后Fox算法执行以下
  • 离线强化学习(Offline RL)系列7: (状态处理) OfflineRL中的状态空间的数据增强(7种增强方案)

    Arxiv原文 S4RL Surprisingly Simple Self Supervision for Offline Reinforcement Learning in Robotics 本文是由多伦多大学 斯坦福大学和Nvidia三
  • elementUI组件修改样式 覆盖无效

    在我们使用第三方UI组件库开发时有时需要对这些组件进行一些样式修改 为了vue页面样式模块化 不对全局样式造成污染 我们往往都会加入scoped属性用来限制样式的作用域 然而这也会导致当我们修改部分ui组件样式失效 为了避免这种情况 我们常
  • 区块链系统:什么是私钥?

    在比特币中 私钥本质上就是一个256位的随机整数 我们以JavaScript为例 演示如何创建比特币私钥 在JavaScript中 内置的Number类型使用56位表示整数和浮点数 最大可表示的整数最大只有9007199254740991
  • 经典C语言面试题1:malloc 和 new的区别?

    malloc free是 C C语言的标准库函数 而new delete是C 的运算符 malloc内存分配成功返回的类型为void 需要通过强制类型转换将void 转换为我们需要的类型 new内存分配失败时会抛出bac alloc异常 不
  • 51单片机开发:通过74HC595控制LED点阵

    1 LED点阵介绍 1 LED点阵就是多个LED发光二极管的集合 在单个LED的发光原理上没有任何区别 2 上面是16x16的LED点阵 总共有16x16 256个LED灯 由32个引脚来控制 其中16个引脚是正极 posn n 1 2 1
  • 数据结构:JAVA 顺序表

    今天介绍的是java里面的顺序表 目录 1 新建一个类并且初始化几个变量 2 display方法 展示数组 3 add方法 添加新元素 4 contains 查询需要找的元素在不在数组中 indexOf 找到这个元素 5 get和set 获
  • mongoDB (zip安装配置)+自动运行

    目录 一 mongo下载 二 文件配置 三 环境变量设置 cmd运行测试 四 设置自动运行 一 mongo下载 下载网址 Download MongoDB Community Server MongoDB 选择zip方式下载 如图 下载完后
  • python怎么产生随机浮点数_玩转random---随机数模块

    random模块介绍 主要用于生成随机数 大部分python人都会用 但是一般人都是使用randint 帮我们生成某个范围的整数 但其实random模块还有很多非常使用的功能供我们使用 接下来我们就一一了解一下我们的random 使用方法
  • JAVA 字符串中找出连续最长的数字串

    题目要求 读入一个字符串str 输出字符串str中的连续最长的数字串 输入描述 个测试输入包含1个测试用例 一个字符串str 长度不超过255 输出描述 在一行内输出str中里连续最长的数字串 示例 输入 abcd12345ed125ss1
  • 灰色预测模型

    一 灰色预测的概念及思想 灰色系统是指系统数据有一些是未知 有一些是已知 白色系统是全都已知 黑色系统是全都未知 而灰色预测就是对含有已知和未知信息的系统进行预测 寻找数据变动规律 生成有较强规矩性的序列 再建立相应的微分方程模型 来对事物
  • Java小项目之简单职工信息管理系统(io流存储数据)

    项目要求 设计一个职工信息管理系统 提供以下功能 1 职工信息录入功能 职工信息用文件保存 输入 2 职工信息浏览功能 输出 3 查询或排序功能 至少一种查询方式 算法 按工资查询 按学历查询等 4 职工信息删除功能 5 职工信息修改功能
  • GE IS220PDIAH1A 336A4940CSP1 控制主板模块

    GE IS220PDIAH1A 336A4940CSP1 是一款控制主板模块 通常用于工业自动化和控制系统中 以下是可能与这种控制主板模块相关的一些产品功能 信号处理 GE IS220PDIAH1A 336A4940CSP1控制主板模块通常
  • 无线渗透测试&基础命令操作

    文章目录 无线网络参数 基础命令 iwconfig route route相关文件 arp arp相关文件 常用命令 aireplay ng airodump ng 无线网络参数 Cell 01 Address 78 EB 14 B9 96
  • Unity Timeline的使用

    创建TimeLine 第一种方法 在Assets目录下 右键Create gt TimeLine 双击创建的TimeLine文件 就可以打开TimeLine窗口 第二种方法 找到右上角的菜单Window 找到Sequencing gt Ti