时间控制-元器件接入步骤

时间加速相关回调都在lua文件 TimeAcceleratorAgent.lua

1. pc端editor切换到分支ForEquip;vr端editor下切到分支ForEquip分支

2. 周期时间配置表说明

-- 周期加速时间配置表
local accelTimeConfig = {
    EntityId = "",                                --可不写
    CameraDistance = 0.5,                        --相机距离
    CameraHeight = 0.5,                            --相机高度
    Name = "天竺葵进行黑暗处理24小时",            -- 时间控制名称
    TriggerType = 1,                            -- 触发方式 0:自动触发 1:手动触发
    PeriodType = 0,                                -- 是否周期 0:周期时间 1:普通时间
    RealTime = 86400,                            -- 实际持续时长 86400 秒
    HopeTime = 10,                                -- 期望时长 10 秒
    HaveWatchPoint = true,                        -- 是否有观察视角
    WatchType = 1,                                -- 观察方式 0: 规律观察 1:非规律观察
    WatchPoint = {
        {
            ParamKey = "1",                        -- 观察点名称
            WatchPointTime = 30000,                -- 观察点时间
            IsEnterWatchPoint = true            -- 是否进入观察点(配置为true)
        }
    }
}

3 根据老师配置的触发条件来触发周期时间

参数名 含义
tData 周期时间表
element 元器件对象

TimeAccelerator.TriggerPeriodTime(tData,element)

时间配置表连接:
https://shimo.im/sheets/kAg8ZSQwVSAT7gFo/6PNtz

eg: 制作孢子印颗粒
触发条件:培养皿正面朝下罩住菌盖

需要调方法TimeAccelerator.TriggerPeriodTime(tData,element)

需要注册每帧都调用的方法(基本全部都需要)
1.如果需要线性变化表现
2.需要记录时间的
3.受到场景中其他时间加速影响的(基本全部都需要)
TimeAccelerator.VarUpdateEvent.Register(self, self.FFTimer)

4 重写Quit()方法

在元器件删除时需要关闭时间加速的UI

参数名 含义
element 元器件对象(例 self)
fun 注册的时间加速方法(例 self.FFTimer)

如果有注册方法,则需要把注册的方法穿进去,没有则不传
TimeAccelerator.ExitPeriodTime(element,fun)

5 lua用到的一些回调

回调名称 含义
PeriodTimeStart 周期时间开始
PeriodTimeEnd 周期时间结束
OnPeriodExitControl 周期时间UI关闭
OnWatchPoint 进入观察点
OnGlobalTimeScaleChanged 场景加速状态改变回调
OnGlobalTimeScaleChanged 运行速度倍率改变回调

6 时间加速的一些规则

· 进入周期时间的观察视角后,不能进最佳视角(双击视角)
· 在时间暂停状态或者加速状态不能触发周期时间
· 周期时间触发,lua只需要判断什么时机触发即可。隐藏不需要我们去判断,元器件业务不需要管,只有
一条在元器件删除的时候,需要调方法: TimeAccelerator.ExitPeriodTime
· 时间加速和元器件相关联的只是一个全局的速率。元器件有需要的可能需要自己来写一个时间加速

7 例子

· 1 TimeAccelerator.VarUpdateEvent.Register(self, self.FFTimer)
· 2 需要自己注册update方法,自己记录时间

function XXXAgent:FFTime(time)
    self.timer = self.timer + time
    if self.timer > self.totTime then
        --满足条件 todo  处理自己的业务逻辑
    end
end

function XXXAgent:Quit()
    TimeAccelerator.ExitPeriodTime(self,self.FFTime)
    self:LBABaseDestroy()
end

8 效果展示