赞
踩
EasyTimeline 是一个简单时间线处理插件,可以便捷的生成,处理场景中的事件。插件提供一个以时间为主要顺序的列表响应机制,自动处理设定好的事件。
目前EasyTimeline 的应用还在不断更改和适配中。主要应用目的是一些游戏关卡中的事件处理。
注意: EasyTimeline 的计时不受 timescale 限制,在设置时请使用真实时间处理
实际运用下的界面:
Element :每一个事件处理元素通过列表进行存放,每个事件处理元素可以自由托拽改变顺序。运行时,每个元素会依照列表顺序一一运行。在构建时,一定要以各事件处理元素的先后进行放置。
提供的可修改的参数:
Condition : 处理一个事件单元时,需要满足一定的条件才可进行相应的事件操作。当条件满足时EasyTimeline 会通过getFunc 信号参数的变换来触发事件。
Function :处理一个事件单元时,设置需要实现的效果。当事件处理完毕时会通过finished信号参数触发下一事件。
到达指定的时间时触发事件。
参数:
Get Times : 选择触发的时间。
在上一事件结束后,等待一段时间触发下一事件
参数:
Wait Time: 等待的时间
某个事件结束后等待一段时间触发下一事件。因为功能与上一条重复,所以此条件不可使用。
开始,选择此项时会直接触发事件,同时整个 EasyTimeline 才会开始计时。如果需要 Reach Time 或者选择其他时间的条件,请在使用他们之前使用 start 条件
支持大部分代码附加的条件,EasyTimeline 会将当前的事件元素传至方法中,在自定义的条件函数传入参数里,需要定义一个 timeInspctor 参数,并且通过将 getfunc 参数设置为 true 达到条件成立的效果。
Obj : 传入条件的物体
Condition Name : 条件函数的函数名
没有任何条件,直接触发事件
用于物体的生成
参数
Prefab: 需要生成的预制体物体(也可以是场景中的物体)
Trans: 物体生成的位置
支持大部分代码的附加功能,EasyTimeline 会将当前的事件元素传至方法中,在自定义的条件函数传入参数里,需要定义一个 timeInspctor 参数,并且通过将 finished 参数设置为 true 达到事件已经结束。
参数:
obj: 方法函数挂载的物体
Function Name: 方法函数名
跳转回到某个事件,并从这个事件开始执行时间线,这个功能如果跳转回原来的事件项,则会形成反复跳转一个循环。
Jump to: 跳转的事件编号
times: 跳转的次数,限制使用这个事件跳转的次数,如果想要无限的循环,则将times设置为负数。
调用某一项的方法,与 jump to 不同的是, call func 仅仅调用相应项的事件,之后继续沿列表向下执行,而不会跳转到调用项。
参数
call num: 调用方法 的事件项编号
改变 timescale参数
改变物体的活跃状态
无条件,直接结束当前事件
使用EasyTimeline 完成: 按下键盘 C 键生成一个 立方体。
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(); } } }
使用EasyTimeline 完成:在等待5秒后让主摄相机的背景变为白色,并且等待2秒后再进入下一事件的处理。
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;//设置事件完成 } }
注意此处返回时间使用的是 WaitForSecondsRealtime 而非 WaitForSeconds,因为在游戏中经常涉及到时间timescale的变换,所以大多数情况下使用真实时间计时是比较便捷的。
设置参数
4. 为了验证事件是在等待2 秒后结束的,我们再添加一个事件项,为使物体隐藏。
在场景中创建一个立方体
设置如下参数
5.点击运行
场景中,5秒后场景背景变成单一的白色,再过2秒,立方体消失。
使用EasyTimeline实现 每隔2秒,改变一次cube的隐藏属性
首先如果是有限次跳转,那么设置times为一个正数,每次等待2秒就在任意项的条件修改为2秒后。
那么请想一想,如上图的设置跳转10次,那么EasyTimeline运行结束后,立方体是隐藏的还是显示的呢?
尝试一下,发现最终的状态是隐藏的!因为element 0 在一开始运行了一次,跳转又运行了10次,一共运行了11 次,所以这里的times并不是代表之前项运行的总次数,而是总次数 – 1 。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。