CategorizedDB

프로젝트 개요

  • 개요 : CategorizedDB는 유니티에서 사용 가능한 데이터 저장소입니다. 해당 데이터베이스의 가장 큰 특징은 각각의 데이터를 윈도우나 여타 운영체제들과 비슷하게 폴더 구조로 관리하며 데이터를 손쉽게 선택하고 이동할 수 있도록 설계되었다는 점 입니다. 또한 데이터 구성 요소를 만들고 해당 구성요소를 사용하는 데이터 베이스를 제작하는 일련의 과정들을 간소화 시키는 것을 통해 유니티를 활용한 컨텐츠 개발을 더욱 손쉽게 만들어줍니다.
  • Owner & Maintainer : 홍기표(Postive)
  • 도구 : Unity, C#
  • Github :
  • 시연 영상

개요

  1. 핵심 기능
    • GUID 기반 데이터 관리로 데이터 무결성 확보
    • 클래스 상속 및 구현만으로 DB와 데이터 클래스, Selector를 손쉽게 제작 가능
    • 데이터 생성 및 할당 시 경로 변경에 따른 영향을 최소화
  2. 추가 구현 내용
    • 간단한 데이터 클래스, DB, EditorWindow, Selector 구현
    • 에디터 UI를 통해 데이터 직관적 관리

🆕효과

  • 데이터 클래스 제작, 수정, 관리 속도 대폭 향상
  • 새로운 데이터베이스 구성 부담 감소
  • 프로젝트 전반에서 통합적이고 체계적인 데이터 관리 가능

구조

업데이트 내역

다양한 트리 계층 표시 기능 추가

문제점

기존 트리의 계층 표시 방식은 카테고리를 통한 하향식 계층 구조로 쉽게 말해 폴더 구조로 표시되고 있었습니다. 근데 필요할 경우 이러한 표시 방식을 다르게 할 필요가 있었고 이러한 문제를 해결하기 위한 방법이 필요했습니다.

해결 방안

트리를 구성하는 기능 그 자체를 클래스로 분리하고 해당 클래스를 상속 받아 커스텀 계층 구조를 작성해주는 것을 통해 사용자가 필요할 시 원하는 계층 구조를 제작하여 사용할 수 있도록 기능을 추가했습니다.

  1. 핵심 기능
    • 트리 빌더 기능 추가
    • 트리 빌더 상속을 통한 커스텀 분류 기능 추가
    • 트리에 빌더 교체 기능 추가
  2. 추가 구현 내용
    • 기본적인 계층 구조 표시 기능(기존에 표시해주던 방식)
    • 클래스 타입 기반 분류 표시 기능
    • 클래스 계층 구조 기반 분류 표시 기능

🆕효과

  • 만일 데이터가 많아졌을 때 사용자가 특정 데이터의 범주를 잘못 선택하였을 때 이를 수정하기 용이해집니다.
  • 다양한 기준에 따라 데이터를 분류하는 것이 가능합니다.
  • 필요 시 사용자만의 기준에 따라 데이터를 분류하는 것이 가능합니다.

기능 사진

클래스 계층 구조로 동작이 가능한 것을 알 수 있습니다.

코드 및 사용 방법

코드 상세

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가 동일한 카테고리에 속해 있는지 확인

 

하위 프로젝트

 

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤