Answers:
我只是做了一些测试,发现在第一个场景中对象的构造函数实际上在初始屏幕仍然显示的时候被调用了。
以下是我使用静态秒表测量的一些时间:
Constructed 0 s
Awake 2.118 s
OnEnable 2.12 s
Start 2.744 s
First Update 2.919 s
因此,看起来我们可以通过从构造函数中触发脚本来触发脚本在启动屏幕结束前(默认设置)运行约3秒钟。您可以尝试从此处触发加载代码(可能在其自己的线程上)。
请注意,这很可能是从加载线程中调用的,因此,由于我们不在主线程上,因此在这里允许执行的操作会受到更多限制。如果加载线程不支持您要执行的特定操作,请考虑发布一个包含您的应用程序详细信息的新问题,我们可以尝试找到解决该问题的方法。
Update()
在构造函数触发后的2.9秒获得了第一次滴答。这就是我目前可以看到的所有东西。
最好的选择是制作自己的加载屏幕,并将其设置为初始场景。然后,从该简单场景开始,使用场景管理器以异步方式在后台加载下一个场景。
我找不到信息来确认这一点,但是根据我的观察,似乎在显示初始屏幕时Unity正在加载您的初始场景。
在某些平台上,如果加载足够快,游戏将在启动屏幕消失之前开始运行。
所有这些可以随时在任何平台,任何版本更新上更改。无法保证这将是一致的,因此最好使用自己的加载屏幕。
简短的回答是不,您不能那样做。
以上两个答案在场景管理方面都是正确的。您可以使用场景管理器加载场景,由于它是异步的,因此您可以并行运行其他代码。
看看SceneManager.LoadScene文档了解更多信息。
在游戏开始后,尽可能快地运行代码的最佳方法是从第一个场景开始运行,并且占用空间很小。我们称它为Splash Scene。它所包含的唯一内容是您的启动图像和运行所需代码并加载另一个场景的控制器。
由于它的占用空间小,因此加载速度非常快,因此几乎可以立即运行您的代码。然后,您可以执行所需的操作,然后加载“ 其他场景”。
您可以尝试的另一件事是删除“启动画面”,删除要在此处显示的所有图像。因为它最初不会被加载,所以它会更快一点。
因此流程如下所示:
较小的场景将更快地加载。您可以使用诸如飞溅控制器之类的东西附加到已加载的飞溅屏幕中的任何对象上。
using UnityEngine;
using UnityEngine.SceneManagement;
public class SplashController: MonoBehaviour
{
void Start()
{
// RunSomeSyncMethod();
SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Additive);
}
}