언리얼의 기본단위는 cm라 한다. 보통 3D프로그램에서 FBX로 불러온다하니
마야에서도 cm로 단위를 맞추고 작업할 것.
너무 작은 스케일감은 들지 않도록 가로 200 세로 150의 넓이의 연못을 구성하자.
씬 아트 구성은 조금 나중에 하고 몰고기를 넣어 움직여 보려고 한다.
한번에 완성 물고기를 넣기 보다 박스형 캐릭터로 먼저 작업을 하고 점차 복잡한 캐릭터로
replace하면서 좀 더 퀄리티를 높히는 방식으로 일부러 작업해보려고 한다.
그래야 나중에 필요한 노하우를 얻을거 같아서.
물고기 애니메이션 작업에 필요한 스터디 요소들
1. 캐릭터 오브젝트와 애니메이션을 어떻게 언리얼로 옮기는가.
2. 애니메이션 루핑시키는법
3. 애니메이션끼리 블랜드시키는법
4. 물고기 AI구성
5. 원하는 위치로 집단 움직임 제어
기본적인 구성
물고기의 움직임은 두가지로 나뉜다. 각 객체의 transform 움직임과 rigging 애니메이션으로 나뉜다.
우선 rigging 요소는 제외 하고 basic 오브젝트를 이용하여 우물안 공간을 돌아다니도록 세팅을 해보자.
behavior tree 라는게 ai를 컨트롤하는 방법이라고 한다. (도큐에서 behavior tree 퀵스타트 내용을 봤는데
번역이 이상한건지 알아먹기 힘들더라)
http://blog.naver.com/devdeepblue/220035263509
이쪽에 behavior tree (이하 BT)에 대해 설명해놓은 블로그가 있다.
원래 문서랑 튜토리얼이랑 다 읽어보고 나서 내용을 알고 시작해야 겠지만 재미가 없다..
봄이라 그런지 졸려죽겠다. 그냥 되던 안되던 조금씩 찾아가며 만들어보자.
전에 한번 훑어봤지만 너무 모르는 내용이 많아서 읽다가 포기했던
behavior tree 퀵스타트 부터 다시 보자.
블루프린트 두개가 필요할거 같다.
AI를 적용시켜줘야 하니까 AIController 블루프린트.
그리고 AI로 움직일 pawn 블루프린트.
퀵스타트에서는 character 블루프린트로 만들었지만 나는 걸어다니는 캐릭터를 만들게 아니기
때문에 그냥 pawn으로 만든다 (전에도 썼지만 charecter는 pawn에 걷거나 점프하는등의
동작에 필요한 요소가 더해진 블루프린트이다 )
각각의 블루프린트를 만들어 AICon과 fishPawn이라는 이름을 붙였다.
이번엔 우클릭 miscellaneous / behavior tree를 만들어 fishBT라고 이름을 지었다.
그 다음 아직 무슨 역할을 하는지 모르겠는 blackboard도 추가해 주자.
fishBB라고 이름을 지었다.
fishSpawn에는 스타터콘텐츠에 있는 cone을 하나 복사해와서 static mesh로 적용해 주자.
AICon
AICon을 먼저 설정해보자.
event Begin Play에 use blackboard를 만들어 붙인다. blackboard asset부분의 탭다운 메뉴를
눌러 만들어두었던 fishBB를 선택해주자.
그리고 get blackboard 와 get controlled pawn 노드를 만든다. 우클릭해서 referecnce to self를
만든다음 get blackboard에 연결. get blackboard의 return value에서 선을 끌고나와 검색메뉴를 열고
set value as vector를 만들어 연결한다.
get controlled pawn의 return value에서 선을 끌어 get actor location을 만들어 붙인다
set value as vector의 key name을 끌어서 검색메뉴가 열리면 promote to variable
(한글 문서에서는 변수로 승격이라고 번역)을 선택한다. 이름은 startLocation이라고 지었다.
블루스크린의 변수쪽으로가서 만들어진 startLocation을 선택하고 default value의 startLocation값을
startLocation이라고 똑같이 써주자.( 몰라 지금은 왜 하는지 )
현재까지 연결된 상태는 아래와 같다.
다음으로 behavior tree를 하나의 노드로 실행해줘야 한다.
run behavior tree노드를 만든다. 노드의 BTAsset 탭메뉴를 눌러 만들었던 fishBT를 선택해준다.
set value as vector의 실행핀을 run behavior tree노드에 연결한다.
--------------------------------------------
따라하긴 했는데 내가 뭘했는지는 모르겠다. 한번 찬찬히 훑어보자.
... 몰라 봐도 아직 모르겠다..
캐릭터 배치와 behavior tree
아까 만들었던 fishPawn을 하나 씬에 배치했다. 크기가 너무 커서 블루프린트안에 들어가 스케일을
0.1로 줄였다.
behavior tree를 더블클릭하여 열어보자.
위쪽에보면 new task, new decorator, new service등이 보인다. 눌러보면 비헤비어트리가 있던
폴더에 새로운 블루프린트가 생긴다. 그 블루프린트들을 다시 BT안으로 불러와 연결하는 방식인거 같다.
behavior tree의 시작점. BT에는 반드시 하나의 root노드를 가진다.
Composite
분기점(branch)의 시작을 정의하고 분기점들이 어떻게 수행될 지에 대한 룰을 정의한다.
selector, sequence, simple parallel등이 있다.
Task
tree의 최하위 노드로써 작업을 실행하는 노드이다.
Decorator
조건문(conditional). 다른 노드에 추가되어 트리의 분기점을 수행할지 결정
Service
composite 노드에 붙는 것으로 분기문이 수행되는 동안 정의된 주기마다 수행된다.
주로 blackboard 체크나 업데이트로 할용된다고 한다.
퀵스타트 task decorator이런거 만드는 부분와서 갑자기 너무 어려워진다;
무엇보다 얘네들을 만들어서 BT에서 눌러와 트리구조를 제작하는 페이지가 안열림.. 이런 개같은 경우가.
음... 더 간단한 튜토어디 없을까. 내용이 너무 건너뛰는거 같아서 봐도 뭔말인지 모르겠는뎅
내가 필요한 부분을 정리해보자. 간단한 큐브들로만 AI를 구현하려고 한다.
큐브들을 6개 정도 연못안에 배치해놓으면 우물안에서 계속 돌아다니도록 한다. 마우스를 클릭하면
클릭한 방향쪽으로 큐브들이 모여들었다가 마우스를 때면 흩어진다.
1. 큐브들이 우물안쪽에서 움직일도록 하는 코딩은 어디에 해야하는가? cube의 pawn? BT? AIController?
2. 마우스클릭 이벤트는 어떠하게 만들어야 하는가?
behavior tree 튜토들 서치
튜토들을 한번 모아서 봐보자.
https://www.youtube.com/channel/UCvtmnaDejy2jmTF3LUmgV0A
https://www.youtube.com/watch?v=qdlF5KI83WY
https://www.youtube.com/watch?v=soRpLxO4zSg
https://www.youtube.com/watch?v=XXGWjaRs4zs