[UE/Basic] 캐릭터 회전 (Charctor Rotation)

2025. 2. 3. 23:28·Unrael/Basic

1. 개요

캐릭터를 회전하기 위해서는 다양한 요소들이 영향을 줄 수 있다.

오늘은 캐릭터 회전에 대해 살펴보자

 

2. 캐릭터 회전 5가지 요소

캐릭터 회전에 영향을 주는 요소들은 아래와 같다.

  • PlayerController
  • Pawn
  • SpringArm
  • Camera
  • CharacterMovement

오늘은 CharacterMovement를 제외한 총 4가지를 살펴본다.

 

3. 캐릭터 회전 구현

1. 회전하고자 하는 값으로 덮어쓴다.

간단하게 머리 속으로 캐릭터 회전을 구현해 본다면 아래 2가지 요소가 필요하다.

  • Rotation : 캐릭터의 현재 회전 값
  • Desired Rotation : 회전하고자 하는 값 (원하는 회전 방향)

그리고 회전 방법은 간단히 Rotation을 Desired Rotation으로 덮어쓰는 것이다.

 

하지만 덮어쓰는 방법은 한 가지 문제가 있다.

캐릭터가 해당 방향으로 바로 회전하면서 시각적으로 부자연스러움이 발생한다

 

2. 회전하고자 하는 값으로 Rotation Rate만큼 회전한다.

갑자기 회전하는 부자연스러움을 해결하기 위해 RotationRate값을 만든다.

RotationRate는 회전하고자 하는 값으로 이동할 때 어느 정도 회전할 것인지 그 비율을 설정한 값이다.

그리고 매 프레임마다 해당 회전 방향으로 RoationRate(속력)만큼 조금씩 회전하게 되면 자연스럽게 회전할 거이다.

 

4.  PlayerController 회전

PlayerController 클래스에서 회전값을 적용하기 위해 아래 함수를 사용한다.

  • AddControllerYawInput
  • AddControllerPitchInput
  • AddControllerRollInput

 

위 함수들 중 AddControllerYawInput 값은 아래와 같이 계산된다.

RotationInput.Yaw += !IsLookInputIgnored() ? Val * (GetDefault<UInputSettings>()->bEnableLegacyInputScales ? InputYawScale_DEPRECATED : 1.0f) : 0.0f;

간단히 말해서 입력값(Val)에 엔진 설정 파일에서 지정된 스케일(InputYawScale_DEPRECATED)만큼 곱하여

컨트롤러 회전 값이 설정된다. 

 

정리하면

  • 입력에 따른 컨트롤러의 회전은 위 함수를 통해 제어한다.
  • 컨트롤러의 회전 값은 입력값(Val)과 엔진 설정 값(InputYawScale_DEPRECATED)에 의해 변경된다.

 

5.  Pawn 회전

폰의 회전 설정은 아래와 같다.

  • 폰은 Actor를 상속함으로 Actor의 회전 함수를 사용하여 제어할 수 있다.
  • 폰은 PlayerController의 빙의 대상이며 동시에 회전 값에 동기화할 수 있다. 

 

Pawn의 옵션 중 위 속성들을 체크하면 PlayerController의 회전값과 폰의 회전값이 동기화된다.

 

6. SpringArm

SPringArm은 소유 폰의 빙의한 PlayerController의 회전 값에 동기화할 수 있다.

  • UsePawnControlRotation을 설정하면 동기화된다.
  • Inherit Pitch, Yaw, Roll은 부모의 Pitch, Yaw, Roll값을 상속한다. (부모의 회전값이 변하면 같이 변하게 된다.)

 

7.  Camera

Camera 또한 소유 폰의 빙의한 PlayerController의 회전 값에 동기화할 수 있다.

  • UsePawnControlRotaion을 설정하면 동기화된다.

'Unrael > Basic' 카테고리의 다른 글

[UE/Basic] 데이터 테이블  (0) 2025.02.07
[UE/Basic] 콜리전 (Collision)  (0) 2025.02.04
[UE/Basic] 입력 트리거  (0) 2025.01.27
[UE/Basic] 자료구조 - TSet  (0) 2025.01.24
[UE/Basic] 직렬화 (Serialization)  (1) 2025.01.23
'Unrael/Basic' 카테고리의 다른 글
  • [UE/Basic] 데이터 테이블
  • [UE/Basic] 콜리전 (Collision)
  • [UE/Basic] 입력 트리거
  • [UE/Basic] 자료구조 - TSet
DevColIn
DevColIn
복잡함을 단순하게
  • DevColIn
    심플한 코딩생활
    복잡함을 단순하게
  • 전체
    오늘
    어제
    • 전체보기 (223)
      • Unreal 부트캠프 (49)
        • TIL (34)
        • 사전캠프 (7)
        • 본캠프 (8)
      • Unrael (10)
        • 환경설정 (0)
        • Basic (19)
        • Component (5)
        • GAS (GameplayAbilitySystem) (3)
        • AI (2)
        • Implement (10)
        • UI (1)
        • Error (1)
        • Network (2)
        • Tip (1)
      • Level Design (5)
      • Math (1)
      • Design Pattern (16)
      • Computer Science (2)
        • Network (1)
        • Database (1)
      • Algorithm (79)
        • Basic (4)
        • Practice (74)
      • C++ (4)
        • Basic (4)
      • Tool (0)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    GameplayEffect
    Animation
    레벨디자인
    하드 레퍼런싱
    gas
    AI
    소프트 레퍼런신
    tsoftobjectptr
    Til
    basic
    게임동기화
    알고리즘
    DesignPattern
    퀘스트
    Implement
    내일배움캠프
    KPT회고
    c++
    assetmanager
    디자인 패턴
    Design Pattern
    actor
    디자인패턴
    사전캠프
    Algorithm
    component
    unrealengine
    액터
    unreal
    본캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
DevColIn
[UE/Basic] 캐릭터 회전 (Charctor Rotation)
상단으로

티스토리툴바