协程在“tebs”变量在游戏中获得一些值时运行。当它工作时,它将 timeScale
设置为零并等待一段时间,然后游戏继续进行。
问题是我想在游戏关闭和重新打开时检查实时/本地时间,并比较它们以检查时间是否过去,因此协程继续运行或结束。
IEnumerator TEBSWait()
{
//INK PLUGIN VARIABLE THAT DETERMINES THE SECONDS TO WAIT
int tebs = (int)_inkStory.variablesState["TEBS"];
//SAVE GAME
Debug.Log("tebsSaved");
var savedState = _inkStory.state.ToJson();
PlayerPrefs.SetString("tebsSaved", savedState);
//STOP TIME & WAIT FOR A WHILE
Time.timeScale = 0;
yield return new WaitForSecondsRealtime(tebs * 60);
Time.timeScale = 1;
PlayerPrefs.DeleteKey("tebsSaved");
}
提前致谢。
最佳答案
当用户失去焦点或退出应用程序时,保存当前时间。当用户返回加载上一次时间并与当前时间进行比较。这样做会给你带来时间上的差异。
在我的示例中,我将刻度保存到 PlayerPrefs。请记住,DateTime.UtcNow.Ticks
是一个long
,而 PlayerPrefs 只能将 int
用作数值,所以我不得不存储它作为字符串
。
void Awake()
{
Load();
}
void OnApplicationQuit()
{
Save();
}
void OnApplicationFocus(bool hasFocus)
{
if (hasFocus) Load();
else Save();
}
void Load()
{
long nowTicks = DateTime.UtcNow.Ticks;
long prevTicks = nowTicks;
string prevTicksString = PlayerPrefs.GetString("ticks", string.Empty);
if (!string.IsNullOrEmpty(prevTicksString)) prevTicks = long.Parse(prevTicksString);
double secondsPassed = TimeSpan.FromTicks(nowTicks - prevTicks).TotalSeconds;
Debug.Log(secondsPassed);
}
void Save()
{
PlayerPrefs.SetString("ticks", DateTime.UtcNow.Ticks.ToString());
PlayerPrefs.Save();
}
关于c# - 重新打开游戏时如何检查时间是否过去?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57509475/