我正在使用以下程序在程序的开头启动计时器:
GetWorldTimerManager().SetTimer(MyTimerHandle, this, &AMyGameMode::SetNextMatchState, 1.0f, true, 0.0f);
MyTimerHandle是我的GameMode中的私有变量。
这每秒调用一次相应的功能,并检查游戏是否应该进入下一个状态。直到我开始从场景中销毁演员之前,它的工作情况都非常好。从那时起,将不再调用回调。我的销毁呼叫看起来像这样:
Destroy(Cast<AMyPlayerState>(gameState->PlayerArray[i])->MyUnitList.Pop());
所以我没有删除计时器。而且由于“ Destroy(...)”仅标志着一个演员将在不久的将来被GC销毁,因此我认为GC也将删除我的计时器,这显然不是我想要的。
那么如何防止GC破坏计时器(假设这是计时器停止工作的原因)?
答案 0 :(得分:1)
您是否正在加载新地图?加载地图,旅行...
因为这将创建一个新的世界,它具有自己的新计时器管理器,这将使您的计时器被禁用。
在这种情况下,您应该使用游戏实例中的计时器管理器而不是世界