인프런 커뮤니티 질문&답변
유니티 데이터 저장객체 ScriptableObject에 대해 의견 여쭤보고 싶습니다
작성
·
30
·
수정됨
0
데이터 저장 방식에 대하여 공부하던 중, ScriptableObject라는 유니티 데이터 저장 용 객체에 대해 알게 되었습니다.
보통 현업에서 일할 때 캐릭터/몬스터의 스텟 등 에디터 내에서 조절해주는 경우는 ScriptableObject를 사용하고,
세이브 파일, 설정 값 저장 등 런타임 동안 읽고 쓸 가능성이 있는 데이터는 Json 및 xml 파일에 데이터를 저장한다고 배웠습니다.
선생님의 수업에서 DataManager들은 스텟같은 전자에 속하는 데이터들도 Json or xml 파일로 데이터를 저장하는 것으로 배워서 궁금한 점이
1. 추측하기로는 배포 후 밸런스 패치 등 외부에서 스텟등을 조절해주기 위해 Json방식을 쓰는 것일까 하는데 맞나요?
2. ScriptableObject 방식이 문자열 읽고 파싱하고 C#데이터로 바꾸는 Json 사용 방식보다 성능이 우수하다고 하는데 전자를 별로 사용하지 않는 이유가 있나요?
3. 현업에서는 ScriptableObject를 자주 사용하나요?
4. 선생님의 ScriptableObject에 대한 개인 의견(ex. 불편함, 효율적임, ...)은 어떠신가요?
이렇게 4가지입니다.
항상 좋은 수업들 올려주셔서 감사합니다. 새로운 강의를 볼 때마다 새로운 가르침을 얻을 수 있어 좋습니다.
답변 2
1
SO 방식의 가장 큰 장점은 다른 에셋의 참조가 가능해서 관리가 손쉽다는 점입니다.
그러나 반대로 베이스 C# 클래스가 변경되면 기존에 작업한 결과물이 날라가는 문제도 빈번해
작은 프로젝트에서만 좋은 전략이라고 봅니다.
특히 데이터가 아주 많아지면, 각자 별개의 파일로 관리되기 때문에
기획자들 입장에서 관리가 굉장히 힘듭니다.
기획자들은 엑셀을 제일 선호하기 때문에 사실 엑셀을 원본으로 관리하는게 일반적이고,
그것을 Json으로 변환해서 배포하는 경우가 많습니다.
엑셀이나 Json으로 관리하면, 에셋을 경로나 Addressable 키값 등으로 참조하게 되는데
혹시라도 누락이 된 것을 개발 단계에서 꼼꼼히 체크를 해줘야 합니다.
이런 부분은 SO가 확실히 편리하죠.
그리고 <성능이 우수하다>는 얘기는 데이터시트 다룰 때 나올 고려되어야 하는 얘기가 아닙니다.
어차피 Json으로 하나 SO로 하나 로딩하는데 드는 시간은
0.00000000000001%로 아주 귀여운 수준이라 뭐가 더 빠른지는 크게 상관 없습니다.
1
안녕하세요, 인프런 AI 인턴입니다. 조현상님.
유니티에서 데이터를 저장할 때 ScriptableObject와 Json은 각각의 장단점이 있기 때문에 사용하는 상황에 따라 선택하는 것이 중요합니다. 질문하신 4가지 사항에 대해 간단히 설명드리겠습니다:
Json 사용 이유:
네, Json을 사용하는 경우는 배포 후에도 외부에서 데이터 파일을 쉽게 수정할 수 있기 때문입니다. 예를 들어, 게임 내 밸런스를 조정하려면 Json 파일을 수정하면 됩니다. Json은 특히 대규모 프로젝트나 협업 시 효율적입니다.ScriptableObject 사용하지 않는 이유:
ScriptableObject는 유니티 에디터 내에서 직관적으로 데이터를 관리할 수 있다는 장점을 가지고 있지만, 런타임 동안 지속적으로 변경되는 데이터나 외부 입력을 필요로 하는 부분에서는 Json처럼 유연하지 않습니다. 또한, ScriptableObject의 데이터는 클래스 설계가 변경될 때 데이터 손실이 있을 수 있습니다.현업에서의 사용 빈도:
ScriptableObject는 주로 프리셋, 설정, 또는 잘 변하지 않는 데이터에 사용됩니다. 예를 들면 아이템 데이터, 캐릭터 기본 스탯 등입니다. JSON이나 XML과 같이 외부로부터 데이터를 관리해야 하거나, 대규모 데이터를 다뤄야 할 때는 덜 사용됩니다.ScriptableObject 개인 의견:
ScriptableObject는 유니티 에디터 안에서의 작업을 편리하게 해주는 도구이지만, 대규모 프로젝트에서는 데이터의 빈번한 변경과 외부 협업을 고려할 때 단점이 될 수도 있습니다. 데이터의 변경이 자주 일어나지 않고, 에디터 내에서의 설계가 중요한 경우에는 매우 효율적인 도구가 될 수 있습니다.
관련하여 유사한 답변들이 있는 두 링크를 추천드립니다:
- Json과 Scriptable Object - Json과 Scriptable Object의 차이점을 다룬 게시물
- Data관리 관련해서 질문드립니다. - 데이터 관리 방법에 대한 논의
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






아하 상세한 답변 감사합니다! 실제 현업 관점에서는 SO가 비선호 되겠네요. 빠른 답변 감사합니다. 덕분에 고민이 해결됐습니다.