IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity Timeline的使用 -> 正文阅读

[游戏开发]Unity Timeline的使用

创建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拖入到轨道上
在这里插入图片描述
播放后,播放到相应片段上胶囊体变白,其他时候是红色的
在这里插入图片描述
在这里插入图片描述

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:35:02  更:2022-04-15 00:39:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:03:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码