본문 바로가기

유니티

[ 유니티 ]Scriptable Object 실행중 저장하기

[ 문제 ]

[문제]

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에 대한 문서

 

SetDirty를 통해 오브젝트에 더티 플래그를 설정 할 수 있다 .이 메서드를 통해 , ScriptableObject에 더티 플래그를 설정,

저장이 가능하게 한다 .

 

만약 저장을 했다가 , 기존 상태로 되돌리는 기능이 필요하다면 Undo.RecordObject 를 사용한다

 

[ 해결]

[ 해결 ]

Disable 될 때 더티 플래그를 설정하여 저장하도록 하였다 .

 void OnDisable()
    {
        EditorUtility.SetDirty(data);
    }

출처

https://docs.unity3d.com/ScriptReference/EditorUtility.SetDirty.html

https://luv-n-interest.tistory.com/1115

http://hajeonghyeon.blogspot.com/2017/06/dirty-flag.html