Unity中的Timeline

这篇具有很好参考价值的文章主要介绍了Unity中的Timeline。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:前言

Timeline与动画系统类似,但是它可以针对多个物体做出一系列多个动画,它可以创建多个轨道,对象激活与隐藏轨道,动画轨道,声音轨道等。每个轨道都可以单独编辑,轨道内的不同资源可以排列并且融合


二:基础操作

可以单独Lock某一条轨道或Mute(禁用)某一条轨道


三:Activation Track(对象激活与隐藏轨道)

unity timeline,# Unity相关技术,unity,游戏引擎
控制物体的显隐,在时间区域内是显示


四:Animation Track(动画轨道)

unity timeline,# Unity相关技术,unity,游戏引擎
控制游戏物体的动画,与Animator一样,可以点击红点进行录制,可以控制身上任一组件的参数。在此轨道上右键可以选择Convert To Clip Track转换成动画片段,进而可以对动画进行更多的设置

unity timeline,# Unity相关技术,unity,游戏引擎
——Start/End:开始和结束的秒数和帧数
——Duration:总持续时间的秒数和帧数
——Ease In/Out Duration:动画融合的时间
——Speed Multiplier:速度
——Pre/Post Extrapolate:开始和结束的游戏物体状态
None:动画开始前/结束后保持物体原位置不变
Hold:动画开始前/结束后保持动画开始和结束位置
Loop:动画开始前/结束后动画循环播放
PingPong:动画开始前/结束后动画来回播放
Continue:动画开始前动画播放一遍,结束后动画没变化


五:Audio Track(声音轨道)

unity timeline,# Unity相关技术,unity,游戏引擎
 控制声音的播放


六:Signal Track(信号轨道)

unity timeline,# Unity相关技术,unity,游戏引擎
Signal包含三部分:Signal Asset(信号资源),Signal Emitter(信号发射器)和SignalReceiver(信号接收器),它其实就是一个Event,作用就是在单独轨道上面添加事件点,在某一帧执行某个方法
——创建信号发射器和信号资源
在轨道上右键选择Add Signal Emitter,Inspector面板选择从Project面板创建的Signal Asset或Create一个新的Signal Asset
——创建信号接收器
unity timeline,# Unity相关技术,unity,游戏引擎
添加Signal Receiver,对应的游戏物体身上会自动添加Signal Receiver组件,与UGUI绑定按钮事件相似(将物体拖拽到Timeline窗口中可以选择Add Signal Track将会自动给物体添加Signal Receiver组件) 

using UnityEngine;

public class Cube : MonoBehaviour
{
    public void OnTimelineSignal()
    {
        Debug.Log("OnTimelineSignal");
    }
}

自定义Signal

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

public class CustomSignalReceiver : MonoBehaviour, INotificationReceiver
{
    public void OnNotify(Playable origin, INotification notification, object context)
    {
        var signal = notification as CustomSignal;
        if (signal != null
            && signal.asset != null)
        {
            Debug.Log(signal.param);
        }
    }
}

public class CustomSignal : SignalEmitter
{
    public int param;
}

七: 自定义Timeline

Timeline分为以下四部分
——Track:轨道,继承自TrackAsset
——Clip:片段,一段Clip代表一个Playable,继承自PlayableAsset
——Behavior、MixerBehavior:属于行为逻辑模板,继承自PlayableBehaviour

——创建Behaviour/MixerBehavior
unity timeline,# Unity相关技术,unity,游戏引擎
自定义行为逻辑,基类有一套自己的生命周期
OnPlayableCreate:每个Clip创建时( Playable播放状态为playing时),相当于Awake
OnGraphStart:每个Clip创建时( Playable播放状态为playing时),在OnPlayableCreate后执行,相当于Start
OnBehaviourPlay:Clip执行时
OnBehaviourPause:Clip暂停时
PrepareFrame:每帧执行,相当于Update,playerData就是轨道绑定的物体,默认是PlayableDirector组件挂载的物体
OnGraphStop:Playable停止时
OnPlayableDestroy:Playable销毁时


————创建Clip
unity timeline,# Unity相关技术,unity,游戏引擎
通过GetBehaviour获取到Behaviour,将逻辑和数据联系起来
可以继承ITimelineClipAsset接口去定义ClipCaps类型

——创建Track
unity timeline,# Unity相关技术,unity,游戏引擎
——TrackColor特性:控制轨道颜色
——TrackClipType特性:可以添加的Clip类型
——TrackBindingType特性:绑定的数据对象,在ProcessFrame函数中会以playerData的形式传递进去
——OnCreateClip:面板上创建Clip时
——CreateTrackMixer:创建自定义混合轨道
——GetClips:获取轨道内的所有ClipAsset文章来源地址https://www.toymoban.com/news/detail-787894.html


八:自定义TImeline案例——全屏遮罩

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

[TrackColor(1, 0, 0)]
[TrackBindingType(typeof(Image))]
[TrackClipType(typeof(ScreenFadeClip))]
public class ScreenFadeTrack : TrackAsset
{
    public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount)
    {
        return ScriptPlayable<ScreenFadeMixBehavioour>.Create(graph, inputCount);
    }
}
using UnityEngine;
using UnityEngine.Playables;

public class ScreenFadeClip : PlayableAsset
{
    public Color maskColor;

    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
    {
        var playable = ScriptPlayable<ScreenFadeMixBehavioour>.Create(graph);
        var behaviour = playable.GetBehaviour();
        behaviour.maskColor = maskColor;
        return playable;
    }
}
using System.Collections;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.UI;

public class ScreenFadeMixBehavioour : PlayableBehaviour
{
    Image img;

    public Color maskColor;

    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        Color blendColor = Color.clear;

        img = playerData as Image;
        if (img != null)
        {
            int inputCount = playable.GetInputCount();
            for (int i = 0; i < inputCount; i++)
            {
                float tempWeight = playable.GetInputWeight(i);
                ScreenFadeMixBehavioour tempBehaviour = ((ScriptPlayable<ScreenFadeMixBehavioour>)playable.GetInput(i)).GetBehaviour();
                blendColor += tempBehaviour.maskColor * tempWeight;
            }
            img.color = blendColor;
        }
    }

    public override void OnBehaviourPause(Playable playable, FrameData info)
    {
        if (img != null)
        {
            img.color = Color.clear;
        }
    }
}

到了这里,关于Unity中的Timeline的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity TimeLine循环播放某个时间段

    1、设置Playable Director的Update Method为GameTime模式 2、API : using UnityEngine.Playables; 我们需要用到PlayableDirector的time属性 3、设置开始和结束时间段(使用的帧率)我在0-158帧循环和158到290帧之间循环 4、代码 代码笔记

    2024年02月11日
    浏览(55)
  • 【unity与android的交互】移动游戏发布更安心!Unity安卓平台打包相关的常见参数全详解

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 首先需要切换到安卓平台 step1 :打包前的基础参数的设置 step2:包名的设置需要勾选,必须要去设置的内容 打包后进行测

    2024年04月17日
    浏览(72)
  • Unity联网多人游戏技术方案调研

    Listen Server (Host) 和 Relay转发服务器游戏包同时包含客户端和服务端逻辑,联网时一个客户端开主,称为Host,其他客户端连入。局域网和互联网都支持。互联网需要有一个匹配服务器帮助找到不同人建立的主机。如果不使用Relay服务器,那对于互联网连接就要使用NAT穿透下的

    2023年04月09日
    浏览(77)
  • 解决Unity打包后Timeline里部分特效没显示的bug

    比较诡异的问题,美术同学给过来的特效资源,在Edtior里是正常播放的,但打包后特效里应该落下来的光柱却消失了。 考虑到打包后的环境和Editor环境的区别 AssetBundle 通过在Editor里加载AssetBundle来播放,发现也是正常的,应该不是资源问题。 ParticleSystem的Culling Mode 粒子系统

    2023年04月08日
    浏览(41)
  • unity脚本中的camera相关代码

    Camera相关代码共有两个脚本,包括CameraContral和Sample_move_Camera 这是一个简单的 Unity 脚本,名为 `CameraContral`,用于控制摄像机的行为。 当前的代码中,`Start` 方法和 `Update` 方法均为空,没有具体的实现。 在 `Start` 方法中,你可以进行一次性的初始化,例如设置摄像机的初始位

    2024年04月13日
    浏览(36)
  • 基于Unity的VR迷宫游戏项目技术分享

    项目重述如下: 在移动端设计一个可参与的创作平台,结合计算机视觉相关技术,获取物理空间中的迷宫设计图; 将移动端获得的迷宫数据转换为三维虚拟场景,并在VR端呈现; 开发基于Unity 3D的双人体验系统,并实现用户在虚拟迷宫中的漫游和交互; 要求实现“VR + VR”形

    2024年02月12日
    浏览(40)
  • Unity Timeline在编辑器下正常,真机(模拟器、手机)不正常播放问题

    出现这个问题很大可能是因为设置了 Managed Stripping Level = Low 只需要改成 Managed Stripping Level = Medium就可以正常播 或者改Assets/link.xml没有就新建 如果还是不能播放,可以考虑下是不是资源打包出问题了。 上面的代码裁剪掉的明显特征是,真机运行log会出现: The referenced script (U

    2024年03月13日
    浏览(95)
  • Unity小游戏——使被砍中的怪物四处飞散

    被武士砍中后,怪物将向四面八方飞散。 动作的不同将导致攻击力度的强弱表现不同,被攻击的各个对象的反应也有很大差异。在格斗游戏中,对对手一顿拳打脚踢后,看到其步履蹒跚的样子,往往可以感受到他的疼痛。相反如果对手显得从容不迫,即使动作再华丽也只能给

    2024年02月15日
    浏览(37)
  • Unity Timeline学习笔记(3) - SignalTrack信号轨道和自定义带参数的Marker信号和轨道

    信号轨道,顾名思义就是运行到某处发送一个信号。 普通用法就是没有任何封装的,个人感觉特别难用,但是有必要理解一下工作原理。 添加信号 我们添加一个信号资源 生成后可以看到资源文件,这个是可以拖到SignalTrack上的。 我们在Timeline上添加两个信号轨道,并拖动信

    2024年04月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包