원본: https://blog.unity.com/technology/enter-play-mode-faster-in-unity-2019-3

관련 항목

Unity 2019.3에서 더 빨리 Play 모드로 들어가세요.

Play 모드는 Unity를 즐겁게 만드는 핵심 요소입니다. 그러나 프로젝트가 복잡해지면서 시작하는 데 시간이 걸릴 수 있습니다. Play 모드로 들어가고 나갈 수 있는 속도가 빠를수록 변경 사항을 더 빨리 수정하고 테스트할 수 있습니다. 그렇기 때문에 실험적인 기능으로 Unity 2019.3 beta 에서 설정 가능한 Enter Play Mode를 도입하고 있습니다.

현재 Editor에서 Play Mode(재생 모드)를 시작하면, Unity는 스크립팅 상태(도메인 다시 로드)를 재설정하고 씬(scene)을 다시 로드하는 두 가지 작업을 수행합니다. 이 작업은 시간이 걸리고, 프로젝트가 복잡해질수록 재생 모드에서 새로운 변경 사항을 테스트하기 위해 더 오래 기다려야 합니다. 그러나 Unity 2019.3 beta부터는 "도메인 다시 로드" 및 "씬 다시 로드" 작업 중 하나 또는 둘 다를 비활성화할 수 있습니다.

테스트 결과에 따르면, 프로젝트에 따라 대기 시간을 최대 50-90%까지 절약할 수 있습니다.

 

 

우리는 AA 타이틀(Production title), 우리의 FPS 샘플, 메가시티, 그리고 빈 프로젝트로 구성 가능한 플레이 모드를 테스트 했습니다. 그래프는 편집기가 재생 모드로 전환하는 데 걸린 시간(초)을 나타냅니다. 해당 숫자가 작을수록 좋습니다.

File > Project Settings > Editor에서 Enter Play Mode Options를 활성화하면 Domain을 다시 로드하고 Scene을 다시 로드하는 옵션을 사용할 수 있습니다. 좀 더 상세한 내용을 원하면 어떻게 플레이 모드를 설정하나?를 확인하세요.

 

이 옵션을 사용하면 코드 변경이 없을 때 플레이 모드 시작 프로세스에서 Domain 및/또는 Scene 다시 로드를 비활성화할 수 있습니다. 플레이 모드에 들어가기 전에 게임 상태를 재설정하려면 API와 Callback을 통해 이 기능에 액세스할 수도 있습니다.

아래 표는 도메인 리로드 및 Scene 리로드를 비활성화 하기 전과 후의 플레이 모드 시작 프로세스를 보여 줍니다:

 

Unity가 플레이 모드로 전환할 때 수행하는 프로세스에 대한 자세한 내용은 문서를 참조하십시오.

이 기능은 현재 실험적이며 모든 Unity 패키지들이 비활성화된 도메인 및 Scene 리로드와 함께 작동하도록 검증되지는 않습니다. 문제가 생기면 포럼에서 알려주세요!

도메인 리로드를 사용하지 않도록 설정한 경우 스크립트를 올바르게 수정하는 방법

보시다시피 도메인 리로드를 방지하는 것은 매우 간단하지만 비용이 많이 듭니다. 플레이 모드가 시작될 때 스크립트 상태가 올바르게 재설정 되도록 스크립트의 정적 필드 및 정적 이벤트 핸들러를 조정해야 합니다.

다음 코드 예제에는 플레이어가 점프 버튼을 누를 때 올라가는 카운터가 있습니다. 도메인 리로드가 활성화된 경우, 플레이 모드로 들어갈 때 카운터가 자동으로 0으로 재설정 됩니다. 도메인 리로드를 사용하지 않도록 설정한 후에는 카운터가 재설정 되지 않고 값이 플레이 모드에 있거나 플레이 모드에서 해제됩니다. 즉, Editor에서 프로젝트의 두 번째 실행에서 카운터가 이전 실행에서 변경된 경우 카운터가 0이 아닐 수 있습니다.

public class StaticCounterExample : MonoBehaviour
{
    // 도메인 리로드를 사용하지 않도록 설정한 경우 이 카운터가 0으로 재설정 되지 않습니다.
	static int counter = 0;

	// Update is called once per frame
	void Update()
	{
    	if (Input.GetButtonDown("Jump"))
    	{
        	counter++;
        	Debug.Log("Counter: " + counter);
    	}
	}
}

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] 특성을 사용하고, 값을 명시적으로 재설정하여 도메인 리로드가 비활성화된 경우 카운터가 올바르게 재설정되도록 합니다. 예:

using UnityEngine;

public class StaticCounterExampleFixed : MonoBehaviour
{
	static int counter = 0;

	[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
	static void Init()
	{
    	Debug.Log("Counter reset.");
    	counter = 0;
	}

	// 프레임당 한 번씩 업데이트가 호출됩니다.
	void Update()
	{
    	if (Input.GetButtonDown("Jump"))
    	{
        	counter++;
        	Debug.Log("Counter: " + counter);
    	}
	}
}

도메인 리로드를 사용 불가능으로 설정한 후 플레이 모드를 종료할 때 Unity는 정적 이벤트 핸들러에서 메서드 등록을 취소하지 않습니다. 정적 이벤트 핸들러에 메서드를 등록하는 코드가 있는 경우 이로 인해 문제가 발생할 수 있습니다. 예를 들어, Editor에서 프로젝트의 첫 번째 Play(재생)에서 메소드는 정상으로 등록됩니다. 그러나 프로젝트의 두 번째 재생에서는 이러한 메소드가 첫 번째 메소드 외에 두 번째로 등록되므로 이벤트가 발생할 때 두 번 호출됩니다.

다음 코드는 정적 이벤트 핸들러에 Application.quitting을 등록합니다:

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");
	}
}

 

우리의 문서에서 도메인 리로드가 비활성화 된 경우 올바르게 수행되도록 스크립트를 수정하는 방법에 대한 자세한 내용을 참조하십시오.

Asset Store

인기 있는 Asset Store packages가 비활성화된 도메인 및 Scene 리로드와 함께 작동하는지 확인하려고 합니다. 프로젝트에서 발생하는 문제를 Asset packages의 게시자에게 보고하여 도움을 받을 수 있습니다.

Join Unity 2019.3 beta!

현재 프로젝트가 플레이 모드로 전환되는 속도가 느린 경우 이 기능을 사용하면 작업 속도가 상당히 빨라질 것으로 생각됩니다. Unity 2019.3 beta에 가입하여 사용해 보십시오. 포럼에서 귀하의 의견을 들을 수 있기를 기대합니다! 이 기능은 실험적이기 때문에 사용자의 요구에 맞게 구성하는 데 도움이 될 수 있습니다. 우리는 특히 당신이 마주치는 문제에 대해 듣기를 고대하고 있습니다.

이미 이 기능을 테스트하고 귀중한 피드백을 제공함으로써 전체 커뮤니티를 도와준 포럼 사용자 @Sini, @chrisk, @Peter77 및 @Baste에게 큰 감사를 드립니다.

블로그 이미지

RIsN

,