오늘도 ScriptableObjects에 대한 마지막 이야기입니다.
어제 말씀드렸듯이 ScriptableObjects로 만든 오브젝트를 수정하면 ScriptableObjects로 생성된 모든 오브젝트에 수정이 가해지게 된다고 말씀드렸습니다. 사실 이렇게 된 이유는 ScriptableObjects로 만든 오브젝트는 ScriptableObjects를 참조하고 있기 때문입니다. 다 같은 ScriptableObjects를 참조하고 있다면 수정이 같이 적용되는 것이 맞겠죠. 이것을 얕은 복사라고 합니다.
저는 이를 해결하기 위해 ScriptableObjects의 깊은 복사 방법을 찾아보았습니다.
가장 먼저 찾은 방법은 ScriptableObjects를 instantiate해서 새 오브젝트에 담으면 깊은 복사를 할 수 있습니다.
var newData = Instantiate(item) as ItemData;
/* newData 신나게 사용*/
Destroy(newData);
하지만 계속 ScriptableObjects로 생성된 오브젝트를 사용하려고 이 과정을 반복하게 되면 비효율적일 것 같네요...
그래서 다른 방법(Convert)도 찾아보았지만 결국 성공하지 못하고 이번 개인 프로젝트는 위의 방법으로 구현하였습니다.
깊은 복사의 중요성과 ScriptableObjects의 깊은 복사를 하는 방법은 설명드렸듯이 알게 되었습니다.
하지만 더 좋은 방법이 있을 수 있기 때문에 고민은 멈추지 않으려고 합니다.
시간이 나면 또 ScriptableObjects의 깊은 복사를 찾아보고자 합니다.