[이득우 언리얼 C++] 6. 캐릭터의 제작과 컨트롤

    💻 Code : https://github.com/tedison7/ArenaBattle

    캐릭터 모델

    Character 클래스를 부모로하는 ABCharacter 클래스를 생성한다.
    ACharacter 는 APawn 클래스를 상속 받고 있다. 앞서 실습한 ABPawn과 동일하게 Capsule 컴포넌트, SkeletalMesh 컴포넌트를 사용하고 있으며, CharacterMovement 라는 컴포넌트를 사용하여 움직임을 관리한다.

    게임 모드에 기본 폰으로 설정하자

    캐릭터 모델은 캐릭터 무브먼트(CharacterMovement) 컴포넌트를 사용하는데 이는 FloatingPawnMovement에 비해 다음과 같은 장점을 가진다.

    • 점프와 같은 중력을 반영한 움직임을 제공
    • 다양한 움직임 설정. 걷기, 기어가기, 날기, 수영하기 등의 다양한 이동 모드 설정 기능
    • 멀티 플레이 네트워크 환경에서 캐릭터들의 움직임을 자동으로 동기화

    컨트롤 회전의 활용

    캐릭터가 회전할 수 있도록 언리얼 엔진은 AddControllerInputYaw, Roll, Pitch 명령을 제공한다.
    삼인칭 템플릿에서 기본으로 제공하는 Turn과 LookUp 입력 설정을 통해 캐릭터의 회전 함수를 구현해보자

    플레이 테스트를 해보면 마우스 좌우 이동에는 플레이어가 회전하지만 상하 이동에는 반응하지 않는것 처럼 보인다
    다음 콘솔 명령어로 속성값을 확인해보자 (~ 키로 콘솔명령어 입력창을 띄울 수 있다.)

    DisplayAll PlayerController ControlRotation

    상단의 속성값을 확인해보면 컨트롤러의 회전값은 올바르게 변화됨을 확인할 수 있다. ABCharacter의 디테일 페이지에서 Pawn세션에 위치한 UseControllerRotationYaw 항목에 의해 적용되는 것이다. UserControllerRotationPitch 항목을 활성화 하면 마우스의 상하 이동에 따라 캐릭터도 상하로 회전하는 것을 확인 할수 있다.

    삼인칭 컨트롤 구현

    삼인칭 템플릿에서 기본으로 제공되는 흰색 마네킹과 동일한 방식으로 캐릭터가 동작하도록 기능을 직접 구현해보자

    • 캐릭터 이동 : 현재 보는 시점을 기준으로 상하좌우 방향으로 마네킹이 이동하고 카메라는 회전하지 않음
    • 캐릭터 회전 : 캐릭터가 이동하는 방향으로 마네킹이 회전
    • 카메라 지지대 길이 : 450cm
    • 카메라 회전 : 마우스 상하좌우 이동에 따라 카메라 지지대가 상하좌우로 회전
    • 카메라 줌 : 카메라 시선과 캐릭터 사이에 장애물이 감지되면 캐릭터가 보이도록 카메라를 장애물 앞으로 줌인

    SpringArm을 활용한 삼인칭 조작에 관련된 기능을 설정해보자

    플레이를 눌러 확인해보면 캐릭터는 회전하지 않고 카메라 지지대가 마우스의 움직임에 따라 회전하는 것을 볼 수 있다.

    그러나 방향키로 캐릭터를 움직여보면 절대 좌표 기준으로 캐릭터가 움직이는 것을 확인할 수 있다.
    카메라가 바라보는 방향기준으로 방향키 입력이 적용되도록 그리고 캐릭터도 이동하는 방향으로 회전하도록 수정해보자

    삼인칭 컨트롤 구현

    고정된 삼인칭 시점에서 캐릭터를 따라다니는 컨트롤의 방식을 요약하자면 다음과 같다

    • 캐릭터 이동 : 방향키를 조합해 캐릭터가 이동할 방향을 결정
    • 캐릭터 회전 : 캐릭터는 입력한 방향으로 회전
    • 카메라 길이 : 800cm
    • 카메라 회전 : 카메라 회전없이 45도로 내려다 보는 고정된 시선
    • 카메라 줌 : 없음, 캐릭터 사이에 장애물이 있는 경우 외곽선으로 처리

    SetControlMode의 인자값을 분리하여 새로운 카메라 기능을 추가 구현해보자. 책에 있는 코드를 따라 작성하여 테스트 하였다. 책에서는 GTA 모드와 Diablo 모드라고 적혀있었지만 범용적으로 Shoulder와 Quater 로 작성하였다.

    캐릭터가 45도 단위로 끊어서 회전함을 확인할 수 있다. 부드럽게 회전하도록 하려면 캐릭터 무브먼트의 UseControllerDesiredRotation 속성을 체크한다. 기존 UseControllerRotationYaw 속성을 끄고 UseControllerDesiredRotation 을 켜서 회전을 보완한다.

    부드럽게 회전하는 것을 확인할 수 있다.

    컨트롤 설정의 변경

    두가지의 카메라 컨트롤 방식을 만들었으니 키입력으로 방식을 변경가능하도록 해보자

    프로젝트 설정의 입력에서 ViewChange라는 액션 매핑(Action Mapping)을 Shift + V키로 할당하였다. 이후 책의 코드를 따라 작성하였다. 책의 코드중 4.27 버전에서 달라진 부분은 SpringArm의 RelativeRotation이 Private이기 때문에 Get, Set 함수로 설정해야한다.

    부드럽게 시점이 변경되는 것을 확인할 수 있다.

    요약

    • 숄더뷰와 쿼터뷰 카메라 시점 구현과 캐릭터 이동 구현
    반응형

    댓글

    Designed by JB FACTORY