TPS 캐릭터 만들기 - Aim Offset
*언리얼엔진5를 배우는 과정을 기록하는 포스팅입니다.
아직 미숙하고 처음 글을 작성하는 만큼 미흡한 부분이 많은데 댓글로 피드백 부탁드립니다! 감사합니다.
.
*현재 강의자료를 토대로 생성하는 캐릭터는 이후 TPS 슈팅 게임에 적용할 캐릭터의 프로토 타입으로 만들고있습니다.
강의를 기반으로 약간의 수치 및 로직 수정이 있을 수 있습니다.
강의자료:
https://www.youtube.com/watch?v=eCDwYVM9Dhw&t=126s
Aim Offset 실행 이미지)
메모)
1. 먼저 AimOffset 을 만든다.
ContentBrowser > Animation > Aim Offset 으로 AO_Rifle_Aim생성
다음으로 애니메이션에 사용될 MM_Rifle_Idle_Hipfire_AO_XX 의 모든 에셋들의 속성을 바꾸기 위해서
모두 눌러 우클릭 > Asset Actions > Bulk Edit Via Property Matrix 를 통해 들어가 속성을 변경해준다.
다음으로 AO_Rifle_Aim의 가로축 세로축을 다음과 같이 설정해주고,
아래의 Additive Settings 의 베이스 포즈에 Idle 애니메이션을 연결해준다.
*여기서 Aim Offset에 사용되는 MM_Rifle_Idle_Hipfire_AO_XX 애니메이션의 명칭은 다음 링크를 통해 확인할 수 있다.
https://docs.unrealengine.com/udk/Three/AnimationNodesKR.html
UDK | AnimationNodesKR
애니메이션 노드 문서 변경내역: Laurent Delayen 작성. 홍성진 번역. 개요 애님 트리 에디터에서 사용할 수 있는 모든 베이스 애니메이션 노드에 대한 참고서입니다. 애니메이션 노드는 언리얼 엔진
docs.unrealengine.com
- Center Center - 애니메이션 포즈는 피치나 요 조절 없이 앞을 조준하고 있습니다.
- Center Up - 애니메이션 포즈는 요 조절 없이 위를 조준하고 있습니다.
- Center Down - 애니메이션 포즈는 요 조절 없이 아래를 조준하고 있습니다.
- Left Center - 애니메이션 포즈는 피치 조절 없이 왼쪽을 조준하고 있습니다.
- ...
Aim Offset의 옵션을 다음과 같이 설정하고,
AnimInstance 의 EventGraph 에서 캐릭터의 Pitch값을 업데이트 해 주고,
출력 노드를 다음과 같이 설정해준다.
(Layed blend per bone 노드를 사용하기 위해 Cached Pose로 만들어주었다.)
여기서 Layered blend per bone 노드가 사용되었는데,
이 노드는 애니메이션의 일부 본만 영향을 끼칠 때 사용하는 노드인데,
Base Pose의 일부 본(예를들어 허리 위) 에 Blend Poses 0 의 애니메이션의 본을 블렌딩하는것이다.
여기서 속성값에 Bone Name / Blend Depth값을 조정할 수 있는데,
Bone Name은 해당 본과 하위의 본에게 영향을 끼치게 할 수 있고,
Blend Depth는 Bone Name에서 지정한 본으로부터 몇개정도의 하위는 영향을 끼치지 않을지 설정 할 수 있는 것이다.
예를들어 0을 입력하면, 해당 본과 하위 본이 모두 적용되지만 (Spine_01을 입력하면 Spine_01, Spine_02, ... 에 영향이 가지만),
1을 입력한다면, 해당 본으로부터 한 개의 본은 적용되지 않고 그 하위만 적용된다. (Spine_01을 입력했지만, Spine_01은 영향을 받지 않고, Spine_02, Spine_03, ... 에 영향이 가해진다.)
여기서, 해당 수치로만 적용하면 이전에 진행한 Turn In Place에 의해 Pitch 축에 대한 회전은 잘 보이지만 Yaw축에 대한 회전은 잘 보이지 않는 현상이 발생하여, AO_Rifle_Aim의 값을 조금 조정하였다.
*Lean에 대한 부분은 진행은 해보았으나, 현재 에셋이 준비되지 않아서 어색한 것인지, 아니면 현재 내 캐릭터의 플레이 시점에서 보기엔 이상한지, 많이 어색한 모습을 보여 빼버렸다.
후에 좀 제작 한 뒤에 카메라 회전시 어색한 느낌이 있다면 추가하는 방향으로 진행 할 예정이다.
* 여태까지 작성한 코드로 Listen Server를 실행하면,
의도와 다르게 클라이언트 쪽에선 정상적으로 보이는 것 같지만 서버측에선 실행되는 것 처럼 보이지 않는다.
강의를 진행하면서 살펴보니,
https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Networking/Actors/ReplicatingFunctions/
블루프린트에서 함수 리플리케이트
블루프린트로 멀티플레이 게임에서 함수를 리플리케이트시키는 방법 안내입니다.
docs.unrealengine.com
를 참고하면 좋아보이는데,
여기서 Custom Event에 설정할 수 있는 Replicates의 옵션에 Multicast / Run on Server / Run on Owning Client 로 세가지가 있다.
옵션에 따라 전체 클라이언트한테 보이게 하거나,
서버에는 실행되는데 경우에 따라 클라이언트에게 보이거나 안보이게 하거나,
개별 클라이언트에게만 실행되게 하는 등의 옵션을 가진 것 같다.
서버에서 변수를 접근하려면 Replication 을 Replicated 로 설정해야 하는 것 같으며,
다음과 같이 변경하여 실행하면 다른 클라이언트도 서로 동일하게 진행되는 것 같다.
아직 서버에 대한 개념이 없는 상태라 어떤 것의 옵션을 어떠하게 바꿔야 적용되는지는 모르는 상태이지만, 서버를 위해서는 설정을 다르게 해야한다는 것을 알았다.