在Unity2019.3中更快地进入运行模式(PlayMode)
https://docs.unity3d.com/2019.3/Documentation/Manual/ConfigurableEnterPlayMode.html
https://blogs.unity3d.com/2019/11/05/enter-play-mode-faster-in-unity-2019-3/
https://docs.unity3d.com/2019.3/Documentation/Manual/ConfigurableEnterPlayModeDetails.html
运行模式(PlayMode)是Unity工作的核心,随着项目变得越来越复杂,进入和退出运行模式变成越来越慢,工作效率就越来越低;在Unity2019.3中引入了一个可快速进入运行模式的实验功能。
根据测试结果,根据不同的项目,启动快速运行模式后,可节省50%~90%的等待时间;
当前在Unity中进入运行模式,Unity会做2件事情:重置脚本状态 [域重载(Domain Reload)],以及重新加载场景;
开启方法为: File / Project Settings / Editor / Enter Play Mode Settings 中,勾上 Enter Play Mode Options ( Experimental );
而且后面还有2个选项:重新域 和 重载场景;
这些选项可以在没有代码更改的情况下,禁用 域和重新场景;
下图展示了禁用域重载和场景重载,进入运行模式的过程
注意:此功能处于实验阶段,有些软件包可能会有问题。
禁用了域重载后如何正确修改脚本?
我们需要修改脚本中静态对象和事件,以确保进入运行模式时正确重置脚本环境;
使用[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]属性,并显式重置该值,以确保在禁用域重载时,相关内容被重置:
using UnityEngine;
public class StaticCounterExampleFixed : MonoBehaviour
{
static int counter = 0;
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
static void Init()
{
counter = 0;
}
void Update()
{
if (Input.GetButtonDown("Jump"))
{
counter++;
}
}
}
如下代码在禁用域重载后会出问题,因为每次启动Start时都会添加Quit方法
using UnityEngine;
public class StaticEventExample : MonoBehaviour
{
void Start()
{
Debug.Log("Registering quit function");
Application.quitting += Quit;
}
static void Quit()
{
Debug.Log("Quitting!");
}
}
使用 [RuntimeInitializeOnLoadMethod] 属性解决:
using UnityEngine;
public class StaticEventExampleFixed : MonoBehaviour
{
[RuntimeInitializeOnLoadMethod]
static void RunOnStart()
{
Debug.Log("Unregistering quit function");
Application.quitting -= Quit;
}
void Start()
{
Debug.Log("Registering quit function");
Application.quitting += Quit;
}
static void Quit()
{
Debug.Log("Quitting the Player");
}
}
Post Link: 在Unity2019.3中更快地进入运行模式(PlayMode)