https://mentum.tistory.com/610
https://blog.unity.com/kr/technology/enter-play-mode-faster-in-unity-2019-3
https://docs.unity3d.com/kr/2021.2/Manual/ConfigurableEnterPlayMode.html
https://docs.unity3d.com/kr/2021.2/Manual/DomainReloading.html
RuntimeInitializeOnLoadMethod Attribute 는 보통 초기화를 위해서 사용한다. 그래서 디버깅용으로 많이 사용한다.
로그인을 실행하는씬에서 먼저한다던가, 처음씬으로 돌아가서 실행하지않아도 처음씬으로 간다던가
GameObject 에 할당을 하지 않아도 처음 한번만 사용되며,
RuntimeInitializeOnLoadMethod 뒤에 같은 조건이 붙으면 공식페이지에서 순서는 보장되지 않는다지만 메소드의 알파벳 순서에 따라 순차적으로 호출된다.
using UnityEngine;
using UnityEngine.SceneManagement;
public class RuntimeInitialize : MonoBehaviour
{
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void FirstLoad()
{
#if UNITY_EDITOR
if (SceneManager.GetActiveScene().name.CompareTo("Login") != 0)
SceneManager.LoadScene("Login");
#endif
}
[RuntimeInitializeOnLoadMethod]
static void A()
{
Debug.Log("AAA");
}
[RuntimeInitializeOnLoadMethod]
static void B()
{
Debug.Log("BBB");
}
}
//출력
AAA
BBB
- 실행순서
1. [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
2. [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)]
3. [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]
4. [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
5. Awake()
6. [RuntimeInitializeOnLoadMethod]
7. [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad )]
8. Start()
- 문제점
도메인이 Reload 되지않기 때문에 static 변수들이 초기화 되지 않는다는 것.
아무런 수정이나 삭제없이 다시 시작할 경우 static 변수는 이전실행 값 그대로 메모리에 남아있다.
물론 수정이나 삭제를 한번 해주면 Reloading 이 된다.
하지만 확실히 보장을 해주기 위해서 사용할수 있는게 RuntimeInitializeOnLoadMethod Attribute 이다
static 하면 싱글톤과 연관이 많은데 singleton 은 generic class 사용이 많다.
하지만 RuntimeInitializeOnLoadMethod 는 generic class 에서 동작하지 않는다.
'제네릭은 런타임에 바인딩이라 호출 시점의 문제인 듯 하다.' 라고 위에 mentum 님 블로그에 적혀있다.
근데 정말 정확히는 모르겠다. 나도 해보니 안된다.
# Domain Reload, Scene Reload 에 대해서는 위에 공식홈페이지 설명을 보면되겠다.
'Unity' 카테고리의 다른 글
[Unity] bundleVersion, BundleVersionCode 가져오기 (0) | 2023.01.27 |
---|---|
[Unity Tip] VS 네임 스페이스 자동 추가 설정 (0) | 2023.01.26 |
[Unity] 유니티 설계 (0) | 2022.12.07 |
[Unity Error] Unity ARMv7 ARM64 빌드시 크래시 에러 (0) | 2022.12.05 |
[Unity] abstract, virtual, interface 정의 (0) | 2022.11.16 |