도드넷
[메모2] 유니티 Monobehaviour 저장? 씬 리로드 다시 불러오기 본문
[개발 메모2]
유니티 Monobehaviour 저장하기?
1. 유니티 인게임 게임오브젝트 컴포넌트인 Monobehaviour 을 상속받은 객체/컴포턴트는
serialized json 형태로 저장할 수 없다.
2. Scriptable Object 형태의 객체는 저장이 가능하지만 그 안에 만약, 인게임 Monobehaviour 컴포넌트가 참조되어 있다면 보이지않는 오류가 나고 재대로 저장이 되지 않느다.
결론 : 인게임에 게임 오브젝트(GameObject)의 컴포넌트로 쓰이는
NEVER, EVER, 절대로 게임 씬안에 존재하는 Mono상속 객체(컴포넌트)를 저장하려 들지말라.
+3. 씬 다시불러오기 리로드 하기
using UnityEngine.SceneManagement;
SceneManager.LoadScene(0); // Reload The Scene.
4. 하지만 유니티 Mono 객체를 참조-저장 할수도 있다?
[PARADOX! 2번]
Weapon은 온갖 무기 데이터를 담는 Scriptable Object이다. 이 녀석은 2번 메모에도 불구하고 Mono 객체인 Projectile과 FX, Buff 등의 다양한 Mono를 상속받은 변수들을 자유자재로 참조하고 저장하며 사용하고 있다.
게다가 이 녀석은 코어 세이브 파일에 들어가 저장까지 되는 매우 귀한몸이다.
그런데 세이브가 잘된다.
로드도 잘된다.
고로, 참조 값고 잘 불러와진다.
WHAT?
Mono 객체는 참조-저장이 안된다고 하지않았나?
이유가 뭘까?
여기서 사용하고있는 Mono 객체인 Projectile과 FX, Buff 는 모두 인게임 씬 안의 오브젝트가
아닌 Asset에 포함되는 Prefab 객체 소속이기 때문이다.
[결론]
게임 씬 안의 Monobehaviour 상속 객체는 참조하여 값을 재대로 저장할 수 없다.
굳이 Monobehaviour 객체를 저장 하고싶다면,
Prefab의 형태로 Asset에 저장된 형태로 사용하자.
하지만 Asset 형태로 고정된 형태가아닌 인게임 변환이 일어나는 Mono 컴포넌트의 값(EX: Unit)을 저장하고 싶다면,
따로 제2의 세이브용 객체, Mono의 상속을 받지않는 순수 [Serializable] 객체만들어서 값을 복사해서 저장해야한다.
'창고 > 게임 개발 [Hidden]' 카테고리의 다른 글
C# 객체 복사하는 법 - 주소가 아닌 값 복사하기. (0) | 2019.11.07 |
---|---|
유니티 모든 타입찾기 활성화 + 비활성화 객체 모두찾기! (0) | 2019.07.02 |
[메모] 유니티 Development Build 로 Build And Run하는 방법 (0) | 2019.06.29 |
유니티 모바일 StreamingAssets 경로 사용해서 객체 읽기 (0) | 2019.06.27 |
유니티 한글화 지역화 언어설정 시스템. [Feat. JSON Localization] (3) | 2019.06.27 |