当前位置:   article > 正文

Unity自制插件—EasyTimeline帮助文档_unityeditorwindow自制timeline插件

unityeditorwindow自制timeline插件

EasyTimeline 功能简介

EasyTimeline 是一个简单时间线处理插件,可以便捷的生成,处理场景中的事件。插件提供一个以时间为主要顺序的列表响应机制,自动处理设定好的事件。

目前EasyTimeline 的应用还在不断更改和适配中。主要应用目的是一些游戏关卡中的事件处理。

注意: EasyTimeline 的计时不受 timescale 限制,在设置时请使用真实时间处理

结构及参数说明

实际运用下的界面:
在这里插入图片描述

Element :每一个事件处理元素通过列表进行存放,每个事件处理元素可以自由托拽改变顺序。运行时,每个元素会依照列表顺序一一运行。在构建时,一定要以各事件处理元素的先后进行放置。

提供的可修改的参数:
Condition : 处理一个事件单元时,需要满足一定的条件才可进行相应的事件操作。当条件满足时EasyTimeline 会通过getFunc 信号参数的变换来触发事件。

Function :处理一个事件单元时,设置需要实现的效果。当事件处理完毕时会通过finished信号参数触发下一事件。

在这里插入图片描述

Condition 提供的条件选项

1. Reach Time

到达指定的时间时触发事件。
在这里插入图片描述
参数:
Get Times : 选择触发的时间。

2. Last Finish

在上一事件结束后,等待一段时间触发下一事件
在这里插入图片描述
参数:
Wait Time: 等待的时间

3.Function Finish

某个事件结束后等待一段时间触发下一事件。因为功能与上一条重复,所以此条件不可使用

4. Start

开始,选择此项时会直接触发事件,同时整个 EasyTimeline 才会开始计时。如果需要 Reach Time 或者选择其他时间的条件,请在使用他们之前使用 start 条件

5. Method

支持大部分代码附加的条件,EasyTimeline 会将当前的事件元素传至方法中,在自定义的条件函数传入参数里,需要定义一个 timeInspctor 参数,并且通过将 getfunc 参数设置为 true 达到条件成立的效果。
在这里插入图片描述
Obj : 传入条件的物体
Condition Name : 条件函数的函数名

6. no condition

没有任何条件,直接触发事件

function 提供的条件选项

1. appear

用于物体的生成
参数
在这里插入图片描述

Prefab: 需要生成的预制体物体(也可以是场景中的物体)
Trans: 物体生成的位置

2.Method

支持大部分代码的附加功能,EasyTimeline 会将当前的事件元素传至方法中,在自定义的条件函数传入参数里,需要定义一个 timeInspctor 参数,并且通过将 finished 参数设置为 true 达到事件已经结束。
参数:
在这里插入图片描述
obj: 方法函数挂载的物体
Function Name: 方法函数名

3.Jump to

跳转回到某个事件,并从这个事件开始执行时间线,这个功能如果跳转回原来的事件项,则会形成反复跳转一个循环。
在这里插入图片描述
Jump to: 跳转的事件编号
times: 跳转的次数,限制使用这个事件跳转的次数,如果想要无限的循环,则将times设置为负数。

4. Call func

调用某一项的方法,与 jump to 不同的是, call func 仅仅调用相应项的事件,之后继续沿列表向下执行,而不会跳转到调用项。
参数
在这里插入图片描述
call num: 调用方法 的事件项编号

5. change timescale

改变 timescale参数

6. change active

改变物体的活跃状态

7. no condition

无条件,直接结束当前事件

使用示例

示例1

使用EasyTimeline 完成: 按下键盘 C 键生成一个 立方体。

  1. 在视图中创建一个cube,命名为 cubePrefab,将它拖拽至 prefab 文件夹中。在这里插入图片描述
  2. 删除视图中的 cube
  3. 在视图中创建 empty,命名为 GameManager
  4. 选择 addcomponent EasyTimeline
    在这里插入图片描述
  5. 点击 + 号,condition 选择 method, function选择 appear
    在这里插入图片描述
  6. 创建新代码 MethodTest , 将它附在 GameManager 上
  7. 写入如下代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MethodTest : MonoBehaviour
{
    TimeInspctor nowtimeInspctor;//获取当前的事件单元
    public void ButtonDownTest(TimeInspctor timeInspctor)
    {
        nowtimeInspctor = timeInspctor; //获取
        StartCoroutine(GetButtonC());//开始协程,检测是否按键
    }

    IEnumerator GetButtonC()//协程
    {
        while (true)
        {
            if (Input.GetKeyDown(KeyCode.C)) // 按下 C 键
            {
                nowtimeInspctor.getFunc = true; //置标志位为 true,表示条件达成,可以运行事件
                break;
            }
            yield return new WaitForFixedUpdate();
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  1. 在条件中加入相应参数
    在这里插入图片描述
  2. 在function中加入参数
    在想要物体生成的位置创建一个empty ,命名为 appearPos。
    将prefab中的物体拖入Prefab, appearPos拖入 Transform
    在这里插入图片描述
    10 点击运行
    场景什么都没有发生,这时键盘按下C ,在appearPos的位置生成了一个 cube。

示例2

使用EasyTimeline 完成:在等待5秒后让主摄相机的背景变为白色,并且等待2秒后再进入下一事件的处理。

  1. 使用示例1中的场景,删除之前EasyTimeline中的项,新创建一个项,condition设置为 start ,start的设置保证从这一项开始, EasyTimeline开始计算经过的时间。function设置为 nofunction在这里插入图片描述
  2. 添加一个项,设置condition 为 reachTime,参数为5,表示等待5秒。设置function为Method。在这里插入图片描述
    创建新代码 CameraTest,放置于 GameManager上。
  3. 键入代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraTest : MonoBehaviour
{
    public void CameraChange(TimeInspctor timeInspctor)
    {
        Camera.main.clearFlags = CameraClearFlags.SolidColor; //相机设为单颜色填充
        Camera.main.backgroundColor = Color.white;//颜色设置为白色
        StartCoroutine(Wait2s(timeInspctor));
    }
    IEnumerator Wait2s(TimeInspctor timeInspctor)
    {
        yield return new WaitForSecondsRealtime(2f);//等待时间
        timeInspctor.finished = true;//设置事件完成

    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

注意此处返回时间使用的是 WaitForSecondsRealtime 而非 WaitForSeconds,因为在游戏中经常涉及到时间timescale的变换,所以大多数情况下使用真实时间计时是比较便捷的。
设置参数在这里插入图片描述
4. 为了验证事件是在等待2 秒后结束的,我们再添加一个事件项,为使物体隐藏。
在场景中创建一个立方体
设置如下参数
在这里插入图片描述
5.点击运行
场景中,5秒后场景背景变成单一的白色,再过2秒,立方体消失。

示例3

使用EasyTimeline实现 每隔2秒,改变一次cube的隐藏属性

在这里插入图片描述
首先如果是有限次跳转,那么设置times为一个正数,每次等待2秒就在任意项的条件修改为2秒后。

那么请想一想,如上图的设置跳转10次,那么EasyTimeline运行结束后,立方体是隐藏的还是显示的呢?

尝试一下,发现最终的状态是隐藏的!因为element 0 在一开始运行了一次,跳转又运行了10次,一共运行了11 次,所以这里的times并不是代表之前项运行的总次数,而是总次数 – 1 。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号