Unity Editor 버전: 2018.4.30f1
특정한 데이터들을 런타임 중 Scene을 이동해도 계속 공유하면서 사용하기 위해 ScriptableObject을 사용하고 Scene, Resource 들을 AssetBundle로 만들고 이 AssetBundle에서 ScriptableObject을 포함했을 때 생긴 문제.
문제 상황은 ScriptableObject를 작성하여 생성한 Asset을 AssetBundle에 포함할 경우 해당 Asset들을 별도의 AssetBundle로 묶어서 생성하지 않고 참조하고 있는 다른 AssetBundle에 자동으로 포함되도록 할 경우 값이 공유가 안 되는 상황 발생.
확인 결과 각 AssetBundle에서 참조되고 있는 생성된 ScriptableObject의 InstanceID 값이 전부 다름.
이 문제는 각 AssetBundle에 ScriptableObject이 자동으로 포함될 경우, 생성 시 개별로 생성되기 때문에 서로 별도의 ScriptableObject Asset으로 생성되어서 별도의 Asset으로 판단하여 값이 공유가 안 되는 문제.
해결 방법은 생성한 ScriptableObject Asset을 AssetBundle로 만들어서 불러오면 동일한 ScriptableObject Asset을 참조하게 됨.
그런데 ScriptableObject Asset을 AssetBundle로 만들어서 개발 진행 중 Unity Editor에서 Crash 가 일어나는 문제가 발생.
일단 Crash Log를 살펴보니 뭔가 ScriptableObject AssetBundle에 포함된 파일에 이상이 있다는 Log가 남아있어 ScriptableObject AssetBundle에 포함된 Asset을 하나씩 LoadAsset 함수로 불러오기를 해보니 특정한 Asset을 Load 시 Crash가 발생하는 것을 확인. 다시 ScriptableObject AssetBundle을 만드니 Editor에서 Crash가 일어나는 현상은 해결되었다.
그런데 이번에는 AssetBundle의 의존성에 의하여 ScriptableObject가 포함된 AssetBundle Scene을 불러오면 Error Log가 출력되면서 ScriptableObject AssetBundle이 불러와지지 않는다.
Error Log
could not be loaded because it references scripts that are not compatible with the currently loaded ones.
Rebuild the AssetBundle to fix this error.
Log의 내용이나 검색했을 때 나오는 부분들이나 Script 관련 문제인 것 같은데 관련 Script를 수정하거나 AssetBundle을 재빌드해도 문제가 사라지지 않았다. 명확한 이유를 알기 어려웠는데 AssetBundle Browser 의 Build 옵션 기준으로 'Exclude Type Information' 옵션을 false 상태로 하고 빌드하니 문제가 해결되었다.
'Unity Engine' 카테고리의 다른 글
Unity에서 Android Plugin을 활용해 APK 설치하기 (0) | 2022.02.28 |
---|---|
Unity TextMeshPro TMP_FontAsset AssetBundle 사용 시 주의점 (0) | 2021.07.21 |
UGUI Text Typing 스크립트 (Rich Text 중첩 지원) (0) | 2020.02.21 |
C# 람다(Lambda) : Button onClick을 반복문에서 동적 할당 시 지역 변수 참조 문제 (0) | 2019.10.10 |
UnityWebRequest: Delete Request DownloadHandler NULL (0) | 2019.08.07 |