오브젝트 - 컴포넌트 에디팅 시스템

정선호·2024년 7월 11일
0

Unity Features

목록 보기
28/28

커스텀 에디터에서 오브젝트의 에디팅에 다양한 확장성을 부여하기 위해
현재 유니티에서 사용하고 있는 컴포넌트 시스템을 유사하게 구현하였다.


개요

유니티 에디터와 거의 유사한 오브젝트 커스터마이징을 수행하기 위해서는 오브젝트와 컴포넌트를 분리시키고, 이에 대한 에디팅 방식을 각각 구현해야 하였다.
대략적인 에디팅 사이클은 다음과 같았다.

이를 충족하기 위해 다음과 같이 클래스를 작성하였다.

IEditable

모든 에디팅 가능한 개체에 붙어있는 인터페이스이다.

프로퍼티

  • ObjectData : 에디터 내에 존재하는 모든 개체가 필수로 가지는 정보들이다.

함수

  • Select : 사용자가 해당 오브젝트를 선택했을 때 수행할 작업을 정의한다. 관련 UI 팝업 등 에디팅 사전 준비작업을 수행한다.
  • StartEdit : 사용자가 해당 오브젝트의 에디팅을 시작할 때 수행할 작업을 정의한다. 커맨드 생성 등의 작업을 수행한다.
  • OnEdit : 사용자가 마우스 등을 이용해 오브젝트를 실시간으로 에디팅할 때 어떤 값을 수정할 지에 대해 정의한다.
  • FinishEdit : 사용자가 해당 오브젝트의 에디팅을 종료했을 때 작업을 정의한다. 생성한 커맨드에 대한 처리 작업 등을 수행한다.
  • UnSelect : 사용자가 해당 오브젝트를 선택 해제했을 때 수행할 작업을 정의한다. UI 종료 등의 작업을 수행한다.
  • Save : 해당 오브젝트 및 컴포넌트 데이터를 저장할 때 사용하는 함수이다.
  • Delete : 해당 오브젝트를 씬에서 삭제할 때 저장되어 있던 데이터도 삭제시킬 때 사용하는 함수이다.

오브젝트

오브젝트는 그 오브젝트가 소유하고 있는 전체 컴포넌트들의 리스트를 갖고 있다.
또한 해당 오브젝트들이 실제로 작동할 수 있도록 모노비헤이비어 함수들 또한 갖고 있다.

컴포넌트

컴포넌트 스크립트의 모노비헤이비어 함수는 오브젝트에서 실행된다.

컴포넌트 UI

컴포넌트 UI는 UI 매니저에서 각각의 컴포넌트에 대한 UI Prefab을 갖고 있다가
사용자가 오브젝트를 Select할 시 오브젝트가 갖고 있는 컴포넌트들에 대한 프리팹을 생성하고, 해당 컴포넌트와 연동시킨다.

데이터 저장 방식

오브젝트 매니저에서 각각의 오브젝트와 컴포넌트에 대한 데이터들을 오브젝트 ID를 키로 하는 딕셔너리에 저장해두고, 이를 저장 및 불러오기하여 사용한다.

profile
학습한 내용을 빠르게 다시 찾기 위한 저장소

0개의 댓글