如何在Unity中找到游戏加载时间?

时间:2018-08-22 13:21:05

标签: c# unity3d time scripting

我想找到按下播放按钮到游戏开始之间的时间。是否可以使用内置函数或系统函数来测量?

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

1 个答案:

答案 0 :(得分:0)

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

但是,是的!实际上,编辑器中存在内置的可能性(仅在编辑器中而不在内部版本或其他内容中)。这是我制作的简短脚本(将其附加到您场景中的任何Awake上):

GameObject
  • ExecuteInPlayMode是必需的,因此该组件在处于编辑模式时已经注册到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 } 事件
  • System.DateTime.Now.Ticks是当前系统时间(以纳秒为单位)。
  • EditorApplication.playModeStateChanged .....只要播放模式更改,就会触发此事件
  • EditorApplication.playModeStateChanged:由于我使用的滴答声是系统时间的 nano 秒,因此我们必须用TimeSpan.TicksPerMilliseconds(= 10.000)来表示,以毫秒为单位获得更多的可读性值代替。

注意::我刚刚进行了一次检查:显然,在所有(startTime - playButtonTime) / TimeSpan.TicksPerMillisecond;AwakeOnEnable通话之后,和之后 第一帧结束。