【问题标题】:calling a function to save data onDestroy() unity调用函数保存数据 onDestroy() unity
【发布时间】:2022-01-15 10:47:39
【问题描述】:

我有这个 List<int> RecordedHR = new List<int>; 正在更新 FixedUpdate() 我想将它发送到另一个脚本,该脚本将计算它的平均值并将该平均值保存在我的 Firebase 实时数据库中。

public List<int> RecordedHR = new List<int>();

    void FixedUpdate()
    {
        LIVEHRDATA.text = FirebaseManager.instance.GetLiveHR();
        str = FirebaseManager.instance.GetLiveHR();

        RecordedHR.Add(str);

        if (str.Equals("Normal"))
        {
            punish = false;

            count = 0;

        }else if (str.Equals("High"))
        {
            count++;
            Debug.Log("Count: "+count);
             
        }

        if(count >= 500 && count<750)
        {
            punish = true;
            Debug.Log("PUNISH FLAG VALUE: " + punish);
            
        }

        if(count >= 750)
        {
            punish = false;
            Debug.Log("PUNISH FLAG VALUE: " + punish);
            AutoPause();
            
        }

        
    }

所以我在场景中实时获取数据,我想在场景切换后立即发送,我可以在 onDestroy() 上执行吗?

【问题讨论】:

  • 不要使用 FixedUpdate - 它主要用于物理计算,使用 Update 代替
  • 感谢您的推荐!但是我可以在填满后使用 on destroy 发送列表吗?
  • 请使用正确的标签!请注意,unityscript 是或更好的是曾经是一种 JavaScript 风格,类似于早期 Unity 版本中使用的自定义语言,并且现在早已弃用了!您的代码显然在c# ..

标签: c# unity3d


【解决方案1】:

是的,但取决于。 OnDestroy 顾名思义在对象被销毁时被调用,但在加载新场景时并非总是如此。几个可能出错的例子:

  1. 当您将游戏对象标记为DontDestroyOnLoad 时,它将被移动到特殊的单独场景中,因此在卸载原始场景时它不会被破坏。
  2. 下一个场景可以叠加加载,这不等于交换场景
  3. 当场景被销毁时,目前没有保证的销毁顺序,因此如果您的脚本使用对其他游戏对象或组件的引用,它可能已经“销毁” - C# 端将存在,但内部 C++ 端已销毁并且可能导致错误。

如果您需要其他方法来处理这个问题,那么您可以使用场景加载 api LoadSceneAsync() 并对异步操作的加载做出反应,或者您可以创建一些 firebase 管理器脚本并订阅 sceneLoaded 或 sceneUnloaded @987654321 @。 记住场景加载无法处理应用程序退出的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-17
    • 2013-04-28
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    相关资源
    最近更新 更多