【问题标题】:How to find game load time in Unity?如何在 Unity 中查找游戏加载时间?
【发布时间】:2018-08-22 13:21:04
【问题描述】:

我想找出我按下播放按钮和游戏实际开始之间的时间。有没有内置函数或系统函数可以用来衡量这个?

我尝试使用 Unity 的内置时间函数将开始时间存储在 Awake() 中,并将结束时间存储在游戏的第一帧中。然后打印 endTime - startTime - Time.deltaTime (运行第一帧所用的时间)。我的结果在大约 0.3 秒时出来,而我的手机秒表给了我大约 3 秒的时间。

【问题讨论】:

  • 为什么不做2个静态变量,当你点击开始时将第一个设置为Time.time,使用LoadSceneAsync加载场景有一个协程检查它的状态以及它何时完全加载加载时间为Time.time - playPressedTime

标签: c# unity3d time scripting


【解决方案1】:

问题是:Awake 在按下 Play 按钮后可能不会立即被调用。 Unity 在后台准备和加载资源,然后进入播放模式。

但是,是的!编辑器中实际上有一个内置的可能性(仅在编辑器中而不是在构建或其他东西中)。这是我制作的一个简短脚本(将其附加到您场景中的任何GameObject):

using System;
#if UNITY_EDITOR // Note that without this pre-processors any build will fail
using UnityEditor;
#endif
using UnityEngine;

// ExecuteInEditMode makes this component also execute if not in PlayMode
[ExecuteInEditMode]
public class LoadTimeTracker : MonoBehaviour
{
    // public only for debugging
    public long playButtonTime;
    public long startTime;

#if UNITY_EDITOR

    private void OnPlayModeChanged(PlayModeStateChange stateChange)
    {
        switch (stateChange)
        {
            case PlayModeStateChange.ExitingEditMode:
                // save the system time when leaving the edit mode
                playButtonTime = DateTime.Now.Ticks;
                break;

            case PlayModeStateChange.EnteredPlayMode:
                // save and compare the system time when entering play mode
                startTime = DateTime.Now.Ticks;
                var difference = (startTime - playButtonTime) / TimeSpan.TicksPerMillisecond;

                Debug.Log("Load Time was: " + difference + "ms", this);
                break;
        }
    }

    private void OnEnable()
    {
        // Register to the playModestaeChanged event
        EditorApplication.playModeStateChanged += OnPlayModeChanged;
    }

    private void OnDisable()
    {
        // Unregister from the playModeStateChanged event
        EditorApplication.playModeStateChanged -= OnPlayModeChanged;
    }

#endif
}
  • ExecuteInPlayMode 是必需的,因此组件在处于编辑模式时已经注册到 EditorApplication.playModeStateChanged 事件
  • System.DateTime.Now.Ticks 是当前系统时间纳秒。
  • EditorApplication.playModeStateChanged ...好吧..只要播放模式发生变化,就会触发此事件
  • (startTime - playButtonTime) / TimeSpan.TicksPerMillisecond;:由于我使用了系统时间的纳秒秒,因此我们必须除以 TimeSpan.TicksPerMilliseconds (= 10.000) 以获得更易读的毫秒值。

注意:我刚刚做了一个检查:显然这将在所有AwakeOnEnableStart 调用和之后之后调用/strong>第一帧结束了。

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 2013-11-11
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2018-04-11
    • 2014-10-25
    • 1970-01-01
    相关资源
    最近更新 更多