[ 문제 ]
[문제]
Scriptable Object를 커스텀 에디터를 통해 수정하였다 . 이 과정에서 OnGUI상의 요소의 변경을 Scriptable Object내의
변경으로 처리 하려 하였다 . 문제는 이를 수정하고 , 에디터를 껐다 켰을때 값이 반영되지 않는다는 점이었다 .
[ 원인 ]
유니티는 기본적으로 에셋을 변경해도 자동으로 저장되지 않는다 . 유니티는 더티 플래그가 설정된 오브젝트만을
저장하기 때문이다 . 씬의 실행도중도 Scriptable Object의 변경후 저장을 원한다면 더티 플래그의 설정이 필요하다 .
[ 더티 플래그 ]
[ 더티 플래그 패턴]
https://luv-n-interest.tistory.com/1115
http://hajeonghyeon.blogspot.com/2017/06/dirty-flag.html
[ 더티 플래그 ]
더티 플래그는 위의 패턴에서 따온 용어이다 . 여기서 더티 플래그란 더티 플래그 패턴에서 따온 용어이다 . 이는 하나 하나의 요소가 변경시마다 저장되기에는 비용이 비싸니 , 변경된 요소에 더티 표시를 해놓고 나중에 저장시에 더티 표시가 있는 것만 저장하는 것이다 .
유니티는 더티 플래그가 설정된 오브젝트만을 저장한다 .
[ SetDirty() ]
EditorUtility.SetDirty(Object target);
SetDirty를 통해 오브젝트에 더티 플래그를 설정 할 수 있다 .이 메서드를 통해 , ScriptableObject에 더티 플래그를 설정,
저장이 가능하게 한다 .
만약 저장을 했다가 , 기존 상태로 되돌리는 기능이 필요하다면 Undo.RecordObject 를 사용한다
[ 해결]
[ 해결 ]
Disable 될 때 더티 플래그를 설정하여 저장하도록 하였다 .
void OnDisable()
{
EditorUtility.SetDirty(data);
}
출처
https://docs.unity3d.com/ScriptReference/EditorUtility.SetDirty.html
'유니티' 카테고리의 다른 글
[ 유니티 ]인터넷 연결확인 (0) | 2023.06.26 |
---|---|
[ 유니티 ].Net 완전정복 (0) | 2023.06.16 |
[ 유니티 ]SkyBox가 인게임에서 안바뀌는 문제 해결 (0) | 2023.04.05 |
[ 유니티 ] 곡 별 점수를 PlayerPrefs에 저장하기 (0) | 2023.04.05 |
[ 유니티 ] 자식 오브젝트 삭제하기 (0) | 2023.04.04 |