做个开关,按下方向键的下后切换开启关闭 - if (Mission.Current != null && Mission.MainAgent != null && Input.IsKeyPressed(InputKey.Down))
- {
- if (!flagFor)
- {
- flagFor = true;
- }
- else
- {
- flagFor = false;
-
- }
-
- }
复制代码然后整个计时器,到时候每0.5s刷一次,省的之后生成的agent没走过这些代码 - //创建一些bool值,我们的代码没有直接写在计时器里面,所以需要用布尔值来传递已经到时间了的消息
- bool hasElapsed500Ms = false;
- bool hasElapsed100Ms = false;
- bool hasElapsed1000Ms = false;
- int Time = (int)(Mission.Current.CurrentTime * 1000f);//记录当前游戏时间,×1000后转int类型
- int Dt = (int)(dt * 1000f);//记录距上一个OnMissionTick触发后经过了多少时间,×1000后转int类型
- //之前直接简单的去用(当前游戏时间 取余 需求间隔时间 == 0)去判定是否满足间隔时间,不过这个法子在这边完全不行。
- //首先是问题的成因。我们获取的CurrentTime,是在OnMissionTick里面进行的获取,所以我们获取的时间被限定在了游戏逻辑帧tick里,不能获取到两个tick之间的时间。
- //因此常用的每过多少时间间隔触发一次的代码:if(游戏时间%间隔时间==0) 这种办法就受到了很大的影响,比如获取CurrentTime的那个tick的时间不满足取余后等于零的判定,就不会执行代码。
- //所以我们需要把逻辑帧的间隔也全部遍历一遍,来看一下除了获取CurrentTime的那个tick外,从上一个tick到这一个tick之间的时间里有没有能满足判定条件的。
- for (int i = 0; i < Dt; i++)
- {
- int num = Time - i;
- if (num % 500 == 0) hasElapsed500Ms = true;
- if (num % 100 == 0)
- { hasElapsed100Ms = true; }
- if (num % 1000 == 0) hasElapsed1000Ms = true;
- }
复制代码
|