Unity를 이용한 카드게임 개발과정을 보면, 거의 대부분이 사용하는 것이 바로 'Scriptable Object'다.
Scriptable Object는 게임 개발에서 데이터 중심 설계를 지원하기 위해 제공되는 특별한 유형의 객체다. 일반적으로 MonoBehaviour와 함께 사용되는 게임 객체와 달리, ScriptableObject는 데이터 저장을 주 목적으로 하며 메모리 및 성능 최적화를 위해 설계되었다.
즉, ScriptableObject를 사용하면 데이터를 효율적으로 관리하고, 복잡한 데이터 구조를 공유하거나 독립적으로 유지할 수 있다.
현재 객체지향에서 지향하는 디자인 패턴은 로직의 분리에 초점을 두고 있다.
https://waterglass0105.tistory.com/112
이러한 관점에서 보았을 때, 스크립터블 오브젝트는 Model 그 자체인 것이다. 물론, 단순 Model이 아니라, 유니티에서 만큼은 에디터 친화적이고, 메모리 효율성을 강조한 Model로 볼 수 있다.
Unity Korea에서 제공한 Scriptable Object 팁 영상을 보면 스크립터블 오브젝트를 다음과 같이 정리한 것을 볼 수 있다.
이를 다시 정리해보면, Scriptable Object의 주요 특징과 장점을 다음과 같이 정리할 수 있다.
주요 특징
- 데이터 중심 설계
ScriptableObject는 주로 데이터를 저장하는 데 사용되며, 게임 로직을 담고 있는 MonoBehaviour와는 다른 역할을 수행한다.
데이터를 코드로부터 분리하여 재사용성과 유지보수를 향상시킨다. - 에디터 친화적
ScriptableObject는 Unity 에디터에서 독립적으로 생성, 편집, 관리할 수 있다.
인스펙터 창을 통해 데이터의 시각적 편집이 가능하며, 프로젝트 내 여러 객체에서 공유할 수 있다. - 메모리 효율성
ScriptableObject는 런타임에 불필요한 객체 생성 없이 데이터를 공유할 수 있어 메모리 사용량을 줄이는 데 효과적이다.
장점
- 데이터 재사용
ScriptableObject는 데이터 파일로 저장되므로 여러 씬이나 객체에서 동일한 데이터를 공유할 수 있다. - 독립적인 데이터 관리
씬 간의 의존성이 없으므로 씬을 전환하거나 삭제해도 데이터는 유지된다. - 런타임 수정 지원
런타임 중에 ScriptableObject 데이터를 변경하면, 변경 사항이 다른 참조 객체에도 즉시 반영된다. - 에디터 확장성
ScriptableObject는 Unity 에디터를 확장하여 사용자 정의 데이터 관리 UI를 만들 때 유용하다.
물론, 사용시 주의점도 존재한다. 바로 객체 공유 문제다. ScriptableObject는 공유 데이터를 다룰 때, 의도하지 않은 변경이 발생할 수 있으므로 주의가 필요하다. 따라서 필요 시 객체 복제(Instantiate)를 고려해야 한다.
이러한 스크립터블 오브젝트를 사용하면 다양한 곳에서 데이터 관리를 효율적으로 할 수 있다.
캐릭터 스탯 관리나 아이템 데이터, 게임 설정 그리고 대화 시스템까지 쉽게 할 수 있다.
개인적으로 가장 놀라웠던 것은 다음 부분이다.
바로, 레벨의 정보도 스크립터블 오브젝트로 사용이 가능하다는 것이다.
이 깃 프로젝트에는, 프로젝트로 진행한 카드게임을 개발하며 카드 정보를 스크립터블 오브젝트로 사용한 코드들이 들어있다. 필요하면 참고바란다.
'Study > Unity Engine' 카테고리의 다른 글
[Unity] 컴파일 과정 (0) | 2025.01.18 |
---|---|
[Unity] 오브젝트 검색 방법 (0) | 2025.01.18 |
[Unity] Layer (0) | 2025.01.18 |
[Unity] Tag (0) | 2025.01.17 |
[Unreal] API (0) | 2024.10.20 |