c5~c6

CJB_ny·2022년 12월 23일
0

득언리얼

목록 보기
2/12
post-thumbnail

5. 폰 제작

애니매이션을 재생하도록 리깅 데이터를 추가한 메시를 스켈레탈 메시라고한다.

"폰" Movement Comp -> 움직임 요소

  • CapsuleComponent : 폰의 움직임과 충돌을 담당하는 Comp이다.

    이녀석은 캐릭터 절반 높이 88, 몸둘레 34로 설정한다. 게임세계에서 움직임을 담당할 것이기 때문에 루트 Comp으로 설정해준다.

  • FloatingPawnMovement : 플레이어 입력에 따라 폰이 움직이도록 해주는 컴포넌트임. 중력에 영향을 받지 않음

입력

UE에서 프로젝트 셋팅에서 입력에서 축매핍, 액션 매핑 설정완료 후에

UE는 입력설정을 처리하기 위해 InputComponent라는 언리얼 오브젝트를 제공해준다.

위에 밑줄친 오브젝트(객체)말하는 거임.

InputComponent를 통해 폰의 멤버 함수와 Binding하면 입력신호는 자동으로 폰의 멤버 함수의 인자로 전달됨.

이게 폰의 SetupInputComponent이다.

바인딩후에 폰을 실제로 움직여야하는데 이때 Pawn Movement Component의 AddMovementInput함수를 통해서 움직일 수 있음.

참고로 UE의 입력시스템은 Player Controller룰 거쳐서 Pawn에게 전달이 되는데 만약에 Player Controller에 특정 입력을 처리하는 코드를 구현을 하면 해당 입력은 PC에서 필터링 되어서 Pawn에게 전달이 안됨.

블루프인트 애니매이션 클래스 로드

질문 ❗❗❗❗❗

LoadObject함수를 ABCharacter의 beginPlay에서 호출하면 에러가 안나지만

ConstructorHelpers::FClassFinder<UAnimInstance> WARRIOR_ANIM(TEXT("AnimBlueprint'/Game/BP_Class/ABP_WarriorAnimBlueprint.ABP_WarriorAnimBlueprint_C'"));

얘는 생성자에서 호출 해야됨.. 아니면 에러남 UE자체가 꺼져버림.

또한 애니매이션 블루프린트 클래스는 블루프린트 클래스 이기 때문에 "_C" 붙여야한다.

애니매이션 동작 👍

애니메이션 블루프린트는 "애님 그래프" 로직에 따라

(이 로직)에 따라 동작하는 캐릭터 애니메이션 시스템을 구동시킨다.

이러한 "애니메이션 시스템"은 C++ 프로그래밍의 AnimInstance라는 클래스로 관리된다.

애님 그래프에 로직에 따라 동작하는 애니매이션 시스템이 c++의 AnimInstance라는 클래스로 관리가 되기 때문에

해당 블루프린트 애니매이션을 찾아서 그 AnimInstance 클래스를 GetMesh()->SetAnimInstanceClass에 넣어준다.

SkeletalMesh는 자신이 관리하는 캐릭터의 애니매이션을 이 애님 인스턴스에 위임하는 구조로 설계되어있다.

스켈레탈 매시가 이 애니매이션 블루프린트 클래스를 실행시킬려면 블루프린트 애셋의 클래스 정보를 애님 인스턴스 속성에 지정해주어야 한다. 이부분이 아까 위에서 코드로 보여준

이부분이다.

6. 캐릭터 제작

Character클래스는 Pawn을 상속을 받고있다.

캐릭터 모델이 폰 모델과 다른점은 폰은 FloatingPawnMovement인데

Character는 CharacterMovement 컴포넌트를 사용을 한다. 이것의 장점은 점프(중력반영)하고, 다양한 움직임 설정가능함 (걷기, 기어가기, 날아가기, 수영 등등)

또한 멀티플레이 네트워크 환경에서 움직임이 자동으로 동기화 됨.

Pitch, Yaw, Roll 회전 ❗❗👍👍👍

ABCharacter의 BindAxis를 통해 delegate로 함수 매핑한 부분에서

마우스 입력에 따라 회전하는 부분에서 대해서 많이 햇갈린다...

https://woo-dev.tistory.com/263

아래 사진에서 Cmd창에

displayall PlayerController ControlRotation 이라고 치면은

위의 처럼 마우스 회전에 따라 ABCharacter의 회전값이 나오게된다.

UE의 캐릭터 모델은 기본으로 컨트롤러 회전의 Yaw회전(Z축 회전)값과 폰의 Yaw회전이 서로 연동이 되어있다.

이를 지정하는 속성이 Actor의 Pawn섹션에 위치한 UseControllerRotationYaw값이다.

이 설정으로 인해 마우스를 좌우로 움직이면 캐릭터는 Z축으로 회전을 하지만 마우스의 상하 이동은 폰의 회전에 아무런 영향을 주지 않는다.


(그러면 UseControllerRotationPitch를 키게되면?)

이거 키면은

컨트롤러와 연동이 되어있기 때문에 Pitch축 (y축)으로도 캐릭터가 같이 회전을 해버린다.

보통게임에서는 이것을 원하는게 아니라 y축으로는 카메라만 회전하기를 원할 것이다.


profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글