저번에 serialize를 구현하고 마무리했으니 우선 노벨 플로우를 간략하게 만들어보자.
대충 대사를 집어넣고 분기별로 다른 대사가 나올수있도록 구성한뒤 deserialize를 해준다.
해당 데이터를 기준으로 로직이 돌아갈수있도록 간단하게 우선 구현을 해보면
여기서 선택지에 따라서
이런식으로 대사분기가 정상적으로 되는걸 확인할수있다.
우선 구현하고싶은건 많지만 만들고있는 노벨메이커를 최대한 완성하는게 우선순위가 더 높으니 마저 작업을 하자
우선 Coroutine List에 각종 노벨 효과들 (연출효과, 음악재생, 표정변경 등등..)을 구현하기 위해서는 ReorderableList에 Add버튼 callback을 래핑해줘야한다.
유니티에 SearchWindowContext라는 에디터를 이용해서 우선 간략하게 동작하는지 체크용으로 붙여만두자.
GraphView는 UIElements인 Visual Element로 구현되어있고, ReorderableList는 IMGUI다.
graphview는 내부적으로 또 다른 좌표계를 사용하고있으므로
현재 마우스 위치 -> graph view 좌표계 변환 -> 변환된 좌표계의 center정보를 기준으로 한번더 가공을 하는방식으로 거쳐줘야 올바른 위치에 나온다.
( 아직은 graph view 좌표계 변환까지만 구현했기때문에 위치가 바뀌면 좌표가 조금씩 어긋난다 )
다음으로는 가장 중요한 불러오기 기능을 구현해야한다.
PointerManipulator를 상속한 DragAndDropManipulator를 구현해주고
Drag - Enter, Leave, Updated, Perform을 콜백에 등록한뒤 대충 올바른 코드를 넣어준다.
그리고 Update부분에 단일 TextAsset파일을 드래그했을때 아래와 같이 마우스 아이콘을 저렇게 설정해주면
대충 불러온다는 느낌이들게 잘 되어있다.
이제 로드부분을 구현해서 Perform때 로드하는기능을 추가하면
이렇게 노드들이 불러와진다.
x, y좌표에 따라서 생성만 될뿐, port끼리의 연결과 내부 노드의 데이터들도 deserialize이후에 데이터를 갱신해주도록 해야함.
TextAsset이 아니거나 복수의파일을 드래그하면 reject로 설정하면 위와같이 마우스포인터가 바뀐다.
이제 Aciton Data들도 싱크가 제대로 이루어지도록 설정하면 포트 연결부분만 구현하면 끝날것으로 보인다.
여기선 포트부분에 버그가 남아있어서 색상도 회색으로 나오고있었음.
마지막으로 불러왔을때 연결되도록 구현해주면 끝.
주의할점은 deserialize로 노드를 우선 먼저 생성해준뒤 이후에 다시한번더 노드를 순회하면서 만들어진 노드끼리 연결시켜줘야한다.
생성과 connect를 동시에 할경우, 아직 생성되지않은 노드에 connection을 시도하게 될테니.
아마 다음으로는 Coroutine List의 고도화와 Action부분의 구조설계와 디테일작업을 할것같음
WebGL Demo (상단 노드기반 샘플로 교체)
https://github.com/dunward/capricorn
노드툴
댓글 0