[RuntimeInitializeOnLoadMethod(...)]
런타임이 시작될 때(앱 실행 또는 에디터에서 Play 버튼을 누를 때)
정적 메서드를 자동으로 호출해 주는 어트리뷰트.
해당 어트리뷰트는 특정 시점에 딱 한번 만 자동호출되며
주로 초깃값을 설정하고 싶을때 사용함.
(RuntimeInitializeLoadType.BeforeSceneLoad)
"첫 씬을 로드하기 전" 이라는 기능을 가진 LoadType
해당 LoadType 은 PlayerPrefs, 정적 데이터 테이블 같은 전역/무상태 초기화에 최적.
그 외 자주 쓰이는 LoadType 들
- AfterSceneLoad : 첫 씬이 로드된 직후 호출.
씬이 올라온 상태에서 해야 할 마이그레이션/검증/씬 루트 스캔 등에 사용.
예시 : “첫 씬에 특정 매니저가 없으면 동적으로 생성하기”,
“부족한 레이어/태그 경고”.
** 마이그레이션 (migration) : 이전 버전에서 쓰던 데이터·설정·구조를,
새 버전의 형식과 규칙에 맞게 옮기고(변환하고) 정리하는 과정
(씬이 로드된 직후, 루트 오브젝트와 컴포넌트에 접근할 수 있기 때문에,
마이그레이션은 AfterSceneLoad 에서 주로 사용됨 )
- AfterAssembliesLoaded : 스크립트 어셈블리들이 메모리에 로드된 직후, 씬 로드보다도 이른 시점.
Unity 오브젝트 접근을 최소화하고, 순수 C# 레벨 초기화
(리플렉션 캐시 만들기, 정적 테이블 빌드, 폴더/파일 존재 확인 등)에 적합.
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void BootstrapAudioPrefs()
{
float ver = PlayerPrefs.GetFloat(AudioPrefsVersionKey, 0);
if (ver < CurrentPrefsVersion)
{
PlayerPrefs.SetFloat(BgmKey, 0f);
PlayerPrefs.SetFloat(SfxKey, 0f);
PlayerPrefs.SetFloat(AudioPrefsVersionKey, CurrentPrefsVersion);
PlayerPrefs.Save();
}
}
(Lunar-Assault_Recon 프로젝트에서는 초깃값을 설정하기 위해 BeforeSceneLoad 를 사용)
PlayerPrefs
작고 단순한 설정값을 저장하는 용도로 자주 쓰임
PlayerPrefs.Set… : 값 쓰기
정수값 사용시 : PlayerPrefs.SetInt(string key, int value)
실수값 사용시 : PlayerPrefs.SetFloat(string key, float value)
문자열값 사용시 : PlayerPrefs.SetString(string key, string value)
지정한 key에 값을 메모리상의 PlayerPrefs 캐시에 기록.
(하지만 직접 디스크에 쓰는게 아닌, "저장 예정" 상태.)
예시)
PlayerPrefs.SetFloat(BgmKey, 0f);
BgmKey 의 값을 0으로 설정하여 PlayerPrefs 캐시에 기록("저장 예정")
PlayerPrefs.Get… : 값 읽기
정수값 사용시 : PlayerPrefs.GetInt(string key, int defaultValue = 0 )
실수값 사용시 : PlayerPrefs.GetFloat(string key, float defaultValue = 0f )
문자열값 사용시 : PlayerPrefs.GetString(string key, string defaultValue = "" )
해당 key가 있으면 저장된 값을, 없으면 기본값을 반환.
예시)
float ver = PlayerPrefs.GetFloat(AudioPrefsVersionKey, 0);
AudioPrefsVersionKey 에 값이 있으면 그 값을 사용하고,
없으면 AudioPrefsVersionKey 의 값에 0을 넣고
변수 ver 에 반환.
PlayerPrefs.Save() : 강제 저장
메모리의 변경분을 즉시 디스크(플랫폼별 저장소)에 쓰기(적용).
PlayerPrefs.SetFloat(BgmKey, 0f);
PlayerPrefs.SetFloat(SfxKey, 0f);
PlayerPrefs.SetFloat(AudioPrefsVersionKey, CurrentPrefsVersion);
PlayerPrefs.Save();
PlayerPrefs.Save() 함수를 적용해서 위의 3개의 값들을 확정적으로 디스크에 저장함
private void ResetAudioPrefsToDefaults()
{
PlayerPrefs.DeleteKey(BgmKey);
PlayerPrefs.DeleteKey(SfxKey);
PlayerPrefs.DeleteKey(AudioPrefsVersionKey);
PlayerPrefs.Save();
Debug.Log("오디오값 모두 초기화");
}
(Lunar-Assault_Recon 프로젝트에서는 빌드하기전, 사용되었던 값들을 지우기 위해 DeleteKey 를 사용)
(해당 사진에서는 3개의 값을 삭제표시하고, PlayerPrefs.Save() 를 사용하여 값을 아예 제거했음)
PlayerPrefs.DeleteKey(string key) : 해당 key에 저장돼 있던 값(int, float, string 구분 없이)
그 존재 자체를 삭제표시
(삭제가 확정적으로 적용되는건 PlayerPrefs.Save())
** 참고 스크립트
'게임 개발(유니티) > 공부사항' 카테고리의 다른 글
| 모바일 화면 고정 / DOTween 기능 (1) | 2025.12.17 |
|---|---|
| 유니티 스크립터블 오브젝트 (0) | 2025.12.01 |
| Lunar-Assault_Recon_ 공부사항 #4 (0) | 2025.10.06 |
| Lunar-Assault_Recon_ 공부사항 #2 (0) | 2025.10.04 |
| Lunar-Assault_Recon_ 공부사항 #1 (0) | 2025.10.01 |