
프로젝트 개요
- 개요 : CategorizedDB는 유니티에서 사용 가능한 데이터 저장소입니다. 해당 데이터베이스의 가장 큰 특징은 각각의 데이터를 윈도우나 여타 운영체제들과 비슷하게 폴더 구조로 관리하며 데이터를 손쉽게 선택하고 이동할 수 있도록 설계되었다는 점 입니다. 또한 데이터 구성 요소를 만들고 해당 구성요소를 사용하는 데이터 베이스를 제작하는 일련의 과정들을 간소화 시키는 것을 통해 유니티를 활용한 컨텐츠 개발을 더욱 손쉽게 만들어줍니다.
- Owner & Maintainer : 홍기표(Postive)
- 도구 : Unity, C#
- Github :
- 시연 영상
개요
- 핵심 기능
- GUID 기반 데이터 관리로 데이터 무결성 확보
- 클래스 상속 및 구현만으로 DB와 데이터 클래스, Selector를 손쉽게 제작 가능
- 데이터 생성 및 할당 시 경로 변경에 따른 영향을 최소화
- 추가 구현 내용
- 간단한 데이터 클래스, DB, EditorWindow, Selector 구현
- 에디터 UI를 통해 데이터 직관적 관리
🆕효과
- 데이터 클래스 제작, 수정, 관리 속도 대폭 향상
- 새로운 데이터베이스 구성 부담 감소
- 프로젝트 전반에서 통합적이고 체계적인 데이터 관리 가능
구조

업데이트 내역
다양한 트리 계층 표시 기능 추가
문제점
기존 트리의 계층 표시 방식은 카테고리를 통한 하향식 계층 구조로 쉽게 말해 폴더 구조로 표시되고 있었습니다. 근데 필요할 경우 이러한 표시 방식을 다르게 할 필요가 있었고 이러한 문제를 해결하기 위한 방법이 필요했습니다.
해결 방안
트리를 구성하는 기능 그 자체를 클래스로 분리하고 해당 클래스를 상속 받아 커스텀 계층 구조를 작성해주는 것을 통해 사용자가 필요할 시 원하는 계층 구조를 제작하여 사용할 수 있도록 기능을 추가했습니다.
- 핵심 기능
- 트리 빌더 기능 추가
- 트리 빌더 상속을 통한 커스텀 분류 기능 추가
- 트리에 빌더 교체 기능 추가
- 추가 구현 내용
- 기본적인 계층 구조 표시 기능(기존에 표시해주던 방식)
- 클래스 타입 기반 분류 표시 기능
- 클래스 계층 구조 기반 분류 표시 기능
🆕효과
- 만일 데이터가 많아졌을 때 사용자가 특정 데이터의 범주를 잘못 선택하였을 때 이를 수정하기 용이해집니다.
- 다양한 기준에 따라 데이터를 분류하는 것이 가능합니다.
- 필요 시 사용자만의 기준에 따라 데이터를 분류하는 것이 가능합니다.
기능 사진


클래스 계층 구조로 동작이 가능한 것을 알 수 있습니다.
코드 및 사용 방법
코드 상세
CategoryScriptableObject
- 카테고리와 관련된 데이터 구조를 정의하는 기본 클래스입니다. 각 카테고리는 GUID, 이름, 부모 GUID 등의 정보를 가지고 있습니다. 이 클래스를 활용해 Category/CategoryElement가 제작된다.
| 함수 명 | 기능 설명 |
SetParent(string parentGuid) | 부모 GUID를 설정합니다. |
GetPath() | 부모 GUID를 기반으로 카테고리 경로를 반환합니다. |
CheckIntegrity() | 무결성 검사를 수행합니다. |
CategorisedDB
- 카테고리 구조를 관리하기 위한 기본 추상 클래스이다. 데이터베이스의 Category 정보를 가지고 있으며 카테고리 추가 및 삭제 등의 기본적인 기능만 제공한다.
| 함수 명 | 기능 설명 |
GetPath(string parentGuid) | 주어진 부모 GUID를 기준으로 카테고리 경로를 반환 |
GetParent(string guid) | 주어진 GUID를 기준으로 부모 카테고리를 반환 |
IsInSameBranch(string parentGuid, string childGuid) | 부모와 자식 카테고리가 동일한 경로(브랜치)에 속해 있는지 확인 |
AddCategory(Category selectedCategory = null) (Editor) | 새로운 카테고리를 추가 |
RemoveCategory(Category category) (Editor) | 지정된 카테고리를 삭제 |
OnValidate() (Editor) | 데이터 무결성을 검사하고 업데이트가 필요한 데이터를 처리 |
CategorisedElementDB
- CategoryElement를 데이터베이스에 추가하고 삭제하는 등 관리하기 위한 클래스이다.
CategorisedDB를 상속 받아 제작된다.
| 함수 명 | 기능 설명 |
CreateData(Type type, Category selectedCategory = null) (Editor) | 지정된 타입의 카테고리 요소 데이터를 생성 |
RemoveData(CategoryElement data) (Editor) | 지정된 카테고리 요소 데이터를 삭제 |
CheckIntegrity() | 무결성 검사를 수행하고 요소 경로를 정렬 |
GenericCategorisedDB<T>
- 제네릭을 사용하여 특정 타입의 카테고리 요소를 관리하는 구체화된 데이터베이스 클래스이다. 이때 T는 CategoryElement를 상속받는 클래스다.
| 함수 명 | 기능 설명 |
Get(string guid) | 지정된 GUID를 기반으로 카테고리 요소를 가져옴 |
CreateData(Type type, Category selectedCategory = null) (Editor) | 새로운 데이터 객체를 생성하고 카테고리에 추가 |
RemoveData(CategoryElement data) (Editor) | 기존 데이터를 제거 |
ICategoryPathFinder : Interface
- 여러 카테고리를 관리하고 경로를 찾는 기능을 정의하는 인터페이스이다.
| 함수 명 | 기능 설명 |
GetPath(string parentGuid) | 부모 GUID를 기준으로 경로를 찾습니다. |
GetParent(string guid) | 특정 GUID를 기준으로 부모 객체를 반환합니다. |
IsInSameBranch(string parentGuid, string childGuid) | 두 GUID가 동일한 카테고리에 속해 있는지 확인 |
하위 프로젝트