c# - 重新打开游戏时如何检查时间是否过去?

标签 c# unity3d

协程在“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/

相关文章:

java - 我做错了什么? (编写虚拟 Activity 并通过 C# 调用它)

c# - 等待动画在 unity3d 中完成

c# - 如何在 Windows 8.1 中捕获高分辨率视频并从中捕获照片。我在尝试时有 UI 跳跃效果

c# - 如何计算两次之间的差异?

c# - 使用 protobuf-net 在 WCF 中序列化数组

php - 如何从 php 脚本中获取结果

unity3d - 如何运行本地 Unity WebGL(文件 ://url) build?

android - 在手机上构建游戏。原生还是引擎?

C# 如何以编程方式重新定位 DataGridView 上的行选择

c# - 通过 Management Studio 和 C# 应用程序访问 Reporting Services