안녕하세요! 투니드입니다!
이번 시간에는 스크립터블 오브젝트에 대해서 알아볼 거예요!
스크립터블 오브젝트(ScriptableObject)는 Unity에서 매우 유용한 기능 중 하나입니다. 데이터 중심의 설계를 돕기 위해 Unity에서 제공하는 이 클래스는 특히 재사용 가능하고, 관리하기 쉬운 데이터를 처리하는 데 유용합니다. ScriptableObject는 에셋(asset) 파일로 저장할 수 있으며, 게임 내 데이터 관리에 있어서 많은 장점이 있습니다.
스크립터블 오브젝트란?
1. 정의
ScriptableObject는 Unity에서 데이터 객체를 에셋 파일로 저장할 수 있도록 도와주는 클래스입니다. 일반적으로 게임의 데이터를 모델링할 때 사용됩니다. MonoBehaviour와 비슷하지만, 게임 오브젝트에 부착되지 않으며 씬에 존재하지 않는 객체입니다.
- MonoBehaviour: 게임 오브젝트와 관련되어 있고, 씬에 존재하는 컴포넌트입니다.
- ScriptableObject: 씬에 존재하지 않고, 데이터를 저장하는 데 최적화된 클래스입니다.
2. 왜 사용하나요?
ScriptableObject는 게임 내 데이터의 관리, 인벤토리 시스템, 게임 설정, 캐릭터 능력치, 레벨 디자인 등 다양한 용도로 사용할 수 있습니다. 그 이유는 다음과 같습니다.
- 에셋 파일로 저장 가능: ScriptableObject는 에셋 파일로 저장할 수 있기 때문에, 데이터를 직관적으로 관리하고 재사용할 수 있습니다.
- 게임 객체와 분리된 데이터 관리: 데이터와 로직을 분리하여 코드가 깔끔하고 유지보수가 쉬워집니다.
- 인스턴스화가 가능: 여러 객체에서 같은 데이터를 참조할 수 있으므로, 메모리 절약과 중복을 피할 수 있습니다.
이론적인 부분은 언제나 어려운 것 같습니다 ㅠㅠ

간단하게 어떻게 만드는지 그리고 어떻게 사용되었나를 보여드릴게요!
스크립터블 오브젝트의 사용법
1. ScriptableObject 클래스 만들기
ScriptableObject를 사용하려면 새로운 클래스를 작성하고 ScriptableObject를 상속해야 합니다. 예를 들어, 아이템 데이터를 관리하는 ItemData 클래스를 만들어 보겠습니다.
[CreateAssetMenu] : 이 특성(attribute)은 에디터 메뉴에서 ScriptableObject 객체를 쉽게 생성할 수 있도록 해줍니다. **fileName**은 기본 파일 이름을 설정하며, **menuName**은 에디터의 Assets 메뉴에 표시될 항목 이름입니다.
2. ScriptableObject 에셋 만들기
위와 같이 ScriptableObject를 상속한 클래스를 작성하고 나면, Unity 에디터에서 Assets > Create > Inventory > Item 메뉴를 통해 아이템 데이터를 에셋 파일로 생성할 수 있습니다.
- 아이템 데이터 파일은 Assets 폴더 내에 **Item**이라는 이름으로 생성됩니다.
- 이 파일은 아이템 데이터를 관리하는 데 사용됩니다. 에셋 파일은 Unity 프로젝트에서 직접 수정하고 관리할 수 있습니다.
이런 식으로 프로젝트 탭 안에서 오른쪽 마우스 버튼 클릭 -> Create -> menuName(내가 지정한 메뉴탭) -> 생성 시 fileName으로 생성됩니다! 당연히 파일의 이름은 바꿀 수 있구요!
위에 예제코드에서처럼 스크립터블 오브젝트를 만들면 이런 오브젝트가 만들어집니다! 안에 매개변수들은 설정을 해주면 어디서든 참조해서 사용이 가능합니다!
스크립터블 오브젝트로 구성된 인벤토리 시스템을 만들어보고 싶으신가요?
https://dydgns0729.tistory.com/57
Stardew Valley like Game in Unity Episode 5-1 Inventory System Part 1
안녕하세요 투니드입니다!이번 5편에서는 인벤토리 시스템을 만들어보도록 하겠습니다! https://www.youtube.com/watch?v=mJLuKrk__tk&list=PL0GUZtUkX6t6wXF0U0WAQNVYL68pYUCZv&index=5 튜토리얼을 따라 하기 쉽게 강의
dydgns0729.tistory.com
엄청 상세하게 누구나 따라 할 수 있도록 만들어두었으니 인벤토리 시스템을 테스트해보고 싶으시다면 이 시리즈를 따라 해보시면 좋을 것 같습니다!
스크립터블 오브젝트의 장점
1. 데이터의 재사용성과 중앙 집중화
- ScriptableObject는 다양한 오브젝트에서 동일한 데이터를 재사용할 수 있도록 도와줍니다. 예를 들어, 모든 무기 아이템이 같은 ItemData 클래스를 참조할 수 있어, 아이템 데이터를 중앙에서 관리할 수 있습니다.
- 데이터가 변경되면 모든 참조하는 객체에 자동으로 반영되므로 중복을 방지하고 메모리를 절약할 수 있습니다.
2. 유지보수 및 확장성
- 데이터 중심 설계는 유지보수와 확장성을 높입니다. ScriptableObject를 사용하면 데이터 수정이 게임 로직과 분리되어 있어, 게임 로직을 변경하지 않고 데이터만 변경할 수 있습니다.
- 예를 들어, 아이템 가격을 수정하려면 아이템 데이터만 수정하면 됩니다. 게임 로직은 변경하지 않고, 아이템 가격만 바뀌게 됩니다.
3. 디버깅 및 실시간 수정
- ScriptableObject는 에셋 파일로 저장되기 때문에, 실시간으로 수정하고 디버깅할 수 있습니다. Unity 에디터에서 아이템 데이터를 쉽게 수정하고 변경사항을 즉시 반영할 수 있습니다.
- 또한, ScriptableObject를 사용하면 데이터와 로직을 분리하므로, 디버깅이 쉬워지고 코드가 간결해집니다.
스크립터블 오브젝트를 활용한 예시
1. 인벤토리 시스템
ScriptableObject는 인벤토리 시스템에서 많이 사용됩니다. 아이템 데이터를 스크립터블 오브젝트로 관리하고, 이 데이터를 인벤토리 시스템에서 불러와 사용할 수 있습니다.
2. 퀘스트 시스템
게임 내 퀘스트를 관리할 때, 각 퀘스트의 상태, 목표, 보상 등을 ScriptableObject로 정의하여 퀘스트 데이터를 중앙에서 관리할 수 있습니다.
3. 설정 관리
게임 설정(예: 그래픽 설정, 사운드 설정 등)을 ScriptableObject로 관리하여, 설정을 쉽게 저장하고 불러오는 방식으로 활용할 수 있습니다.
결론
ScriptableObject는 Unity에서 게임 데이터 관리를 효율적으로 처리하는 데 매우 유용한 도구입니다. 데이터를 에셋 파일로 저장하고 게임 로직과 분리하여 유지보수와 확장성을 높여줍니다. 또한, 데이터의 재사용성과 중앙 집중화를 통해 메모리 절약과 디버깅이 쉬워집니다.
- 게임 데이터를 스크립터블 오브젝트로 관리하면 더 깔끔한 코드 구조와 효율적인 데이터 관리가 가능해집니다.
- 유니티 에디터에서 **ScriptableObject**를 쉽게 생성하고 수정할 수 있기 때문에, 게임 데이터의 실시간 수정과 디버깅에 유리합니다.
이처럼 **ScriptableObject**는 Unity 개발에서 데이터 중심 설계를 할 때 매우 유용한 도구이며, 게임 시스템의 품질과 확장성을 높이는 데 큰 도움이 됩니다.
'유니티 기초 배워보기' 카테고리의 다른 글
스크립터블 오브젝트 유니티 에디터상에서 저장하기! (0) | 2025.03.24 |
---|---|
Canvas 기본 컴포넌트!(Canvas, Canvas Scaler, Graphic) (0) | 2025.03.13 |
프리팹(Prefab)! (0) | 2025.03.05 |
Sortign Layer (0) | 2024.10.16 |
충돌체 (Collider) (0) | 2024.10.16 |