5.4 게임애니메이션샘플 5-2 [Traversed]


 Step4.

1.

여긴 지금까지 구한 구조체의 변수에 따라 장애물 타입을 결정 하는 곳 이다.


아 타입구분을 위해 장애물 높이나 넓이를 구했던 거구나....

이렇게 깊은 뜻이 있었구나...

아무튼 노드는 간단하다.



요런식으로 만들면 된다.


노드만 간단하다는 의미다.

구현에는 정교한 설계가 필요 할듯 하다.


2.

디버깅 부분이다.

더 간단하다.


그래서 안 적는다.



Step5.


1.

4번에서 액션타입을 얻어왔다. 얻어온 액션타입이 None 이면 함수 종료


2.

5.2단계: 인터페이스를 사용하여 전방 에지 위치를 Anim BP로 보냅니다. 이 변환은 다음 Motion Matching 검색 내의 사용자 지정 채널에 사용됩니다.

 설명만 보면 몹시 중요한 부분이다.

아마 Traversal PSS에 어떤 커스텀 채널이 있나보다.

아직 만들기 전이라 모른다. 그러고 보니 이거 만든 사람도 코맨트상자를 예쁘게 칠해뒀네.

사려깊다.




항상 무식하게 cast 해 와서 썼는데, BPI 처음 만들어 본다. 

일단 만들고 

SetInteractionTransform 

GetInteractionTransform 

두개 함수가 있다. 각각 이름에서 역할을 알수 있다.



3.

구조체를 하나 더 만든다.

만들어진 구조체로 몽타주를 불러온다고 한다.

형태는 게이트와 스피드만 추가 하면 되는 간단한 형태이다.




CHT_TraversalAnims

선택테이블을 추가 해 주고, 여기서 더 진행 하려면 모션매칭 파일들 작업을 우선 해야 한다.



장애물 타입별 nested 선택기를 추가 해 준다.

테이블 셋팅이 지금까지와 다르다.

컨텍스트 데이타에서 클래스가 아닌 스트럭쳐를 선택 해 주고

TraversalChooserParams를 넣어준다.

아웃풋 타입은 몽타주를 선택 해 준다.



이제 몽타주를 만들어 준다.

몽타주에 설정된 애님노티파이와 커브가 보인다. 찾아보자.

이것저것 참 많네,무시하고 몽타주를 우선 다 만들어 주자.


선택기에 몽타주를 등록해 주면서 보는데

구분하는 기준을 잘 모르겠다.

모션을 비교해 봐도 큰 차이를 모르겠지만. 장애물의 넓이에 따라 모션 출력을 달리 해 주고 있다.

다른 비교 조건은 스피드 인데 이건 당연히 정지 걷기 달리기 상태에 따라 달라야 하니 필요하다.

모션을 추가 하지 않고 더 다채롭게 보일 수 있는 방법이 뭐가 있을까..나중에 한번 시도 해 보는것도 재밌겠다.


에픽프로젝트에서 런상태에 스피트 값이 25로 되어 있는데 암 250을 잘못 입력한게 아닐까 싶어서 난 250으로 수정해서 작성한다.


어디까지 했더라...

아 캐릭터BP에서 스텝 5를 하던중이였지



구조체 선택 파라미터에서 선택기로 변수값을 전달하는 과정이다.

이과정을 통해 상황에 맞는 몽타주가 선택이 된다.


4.




모션매치 라는 함수가 있다.

선택기의 모든 값을 가져와 전달 해주고 전달 받은 값으로 적절한 몽타주를 골라준다.

골라준 몽타주를 전달받아 구조체에 넣어준다. 

몽타주를 가져오지 못하면 함수를 빠져나간다.

포즈히스토리네임은 애님비피에 포즈히스토리에 태그로 등록을 해 줘야 한다.


5.


이벤트그래프에서 커스텀 이벤트를 하나 만들어 준다.

perfromTraversalAction




그리고 구조체 연결 해 주면 함수가 끝이 난다.

이제 이벤트그래프로 나가서 만들어준 커스텀 이벤트를 살펴보자.



PerformTraversalAction

순회 행동 이벤트 수행 - 이 이벤트는 TryTraversalAction 함수의 끝에서 트리거되고 결과를 사용하여 순회 몽타주를 재생합니다. 이는 함수가 아니라 이벤트여야 하며, 이는 몽타주가 완료되거나 혼합되거나 중단될 때 잠재 이벤트를 트리거하는 편리한 Play Montage Event 노드를 사용할 수 있습니다. 순회 동작을 수행하는 동안 Flying Movement 모드를 사용하여 Root Motion이 Z축으로 문자를 이동할 수 있습니다. 또한 문자가 올바르게 정렬되도록 하기 위해 동작 중에 횡단된 장애물과의 충돌을 비활성화합니다. 이는 비교적 간단한 이벤트로 보다 강력한 순회 시스템으로 대체할 수 있으며, 시연 목적으로만 제공됩니다.



UpdateWarpTargets의 역할을 확인 할수 있다.
장애물과 충돌을 비 활성화 했을때 해당 함수에서 캐릭터를 front ledge와 back ledge에 맞춰준다.


컬리전을 무시 해주고 비행모드로 바꿔 중력을 무력화 해준다.

근데 개인적인 느낌으론 컬리전을 끄지 않는게 더 좋아 보인다.
이부분은 좀더 테스트 해 보고 수정을 해 보던지 해야 겠다.



몽타주가 완료되거나 플레이 하지 않았을때 노드도 추가 해 준다.


인풋액션을 만들어 주면 캐릭터BP의 모든 작업이 끝났다.

짠 하고 실행되면 좋겠지만 아직 포즈서치데이타를 만들어 주지 않았다.

스키마를 우선 만들어 주고 PSD를 하나하나 추가 해 준다.

스텝5에서 말하던 커스텀 채널을 만들 시간이다.

PSC_Traversal_Head/PSC_Traversal_Pos

두개를 만들어 준다.



PSC_Traversal_Pos 





5-2에서 만들어준 트랜스폼을 가지고 오는거 같다.


PSC_Traversal_Head




다 만들어 줬으니 스키마로 돌아 간다.
와우 가장 큰 난관을 만났다.
attach 본이 필요 하다. 장애물 높이와 위치쯤에 있는 본인데...
하하하 본을 추가 하는게 문제가 아니라 위치에 고정시키는 방법이 문제 인데...어떻게 해야 하나 일단 무시하고 해보자 어떤 결과가 나오는지.

이해가 안간다...레벨블럭에서 구조체 값을 가져오지 않는다.
구조체를 분해해 다시 조립하는 노드로 프론트 값은 가져오는데 백값을 또 가져오지 않는다.
맞은편 선반을 찾는 노드가 작동을 하지 않는게 원인이다.

이유를 모르겠다.
테스트 없이 노드만 따라 만들다 보니 이제부터 문제를 해결해야 한다.

BackLedge를 검사하는 부분은 내가 변수를 잘못 사용 했다.
레벨블록에서 가져오는 부분은 함수를 두개로 나눴다.
왜인지 모르겠지만 시퀀스를 타지 않는다.
두개로 나눠서 프론트와 백을 각각 가져와 합친다.


Has backfloor 도 문제가 있음을 찾았다.
음...내 예상이 맞다면 이것만 해결 되면 액션타입으로 진입해서 올바른 장애물 타입을 고르고 정상적으로 몽타주가 출력될듯 하다.

길어졌으니 잘라서 가야겠다.



댓글