개요
사이드 프로젝트에 사용할 행동트리 에디터를 만들자.
이번엔 Inspector창을 만들고 노드들의 정보를 저장하고 불러올 수 있게끔 UI를 추가했다.
MemoryPack을 이용해서 데이터를 저장하고 불러올 수 있는 기능을 만들고 연결하여
노드를 저장하고 로드할 수 있도록 했다.
MemoryPack
유니티에서 사용가능한 Serializer로, 노드를 저장/불러오기 전에 직렬화/역직렬화 할 수 있도록 도와준다.
노드마다 고유한 ID가 존재하고, 연결되어 있는 노드를 직접 참조하는게 아닌, 그 노드의 ID를 가지고 참조하도록 되어있다.
노드를 저장할때 그런 정보들만 모아 직렬화하여 저장하면 된다.
하나의 행동트리에 여러개의 노드들이 필요하기 때문에, 한번에 여러개의 노드들을 저장할 수 있는 기능 또한 넣었다.
노드의 저장과 불러오기
화면에서 노드를 세팅해두고 저장버튼을 누르면, .bytes 파일로 저장된다.
좌측의 Load 버튼을 누르면, 저장된 .bytes 파일을 기반으로 노드를 불러온다.
기존에는 유저가 노드를 조작하면 UI에 연결된 이벤트를 통해서 세팅하도록 되어 있었다.
지금처럼 데이터를 받아서 세팅하는 기능이 없어서 추가하게 되었다.
마치며
처음엔 Inspector창을 통해서 노드의 정보를 확인할 수 있도록 하려고 했는데, 만들다보니 그럴필요가 없다고 느꼈다. 그래서 어쩌다보니 메뉴창이 되었는데, 이것도 계속 떠있는것보단 위에 메뉴 팝업을 만들어서 추가하는게 더 보기 좋겠다는 생각이 들었다.
또 UIToolkit의 RnD를 충분히 하고 개발을 시작한것이 아니어서 어떤 기능이 필요할때, 구현이 가능한 기능인지 알 수 있었다. 여기에서 RnD의 중요성을 알게 되었다.
노드의 정보를 불러오고 세팅하는 기능을 추가해야 했었다.
기존 로직은 유저가 데이터를 조작한것을 감지하는 이벤트를 통해서 데이터를 세팅하도록 구현되어 있었다.
때문에 데이터를 받으면 UI를 세팅하는 부분과 유저의 데이터 조작을 감지해서 데이터를 생성하는 부분으로 나눈다음 연결을 했다.
UI를 개발할땐, 데이터를 UI로 세팅하는 부분과 데이터를 만드는 부분으로 쪼개는것이 구조상 좋겠다는 생각이 들었다.