我想找到按下播放按钮到游戏开始之间的时间。是否可以使用内置函数或系统函数来测量?
我尝试使用Unity的内置时间函数在Awake()中存储开始时间,并在游戏的第一帧中存储结束时间。然后打印endTime-startTime-Time.deltaTime(运行第一帧所花费的时间)。我的结果大约在0.3秒时出来,而手机的秒表花了我大约3秒的时间。
答案 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;
,Awake
和OnEnable
通话之后,和之后 第一帧结束。