캐릭터 컨트롤 설정

Unreal 이론|2024. 10. 20. 14:38

[이득우의 언리얼 프로그래밍 Part2 수업의 정리]

 

캐릭터 컨트롤

  • 일반적으로 컨트롤러와 폰, 카메라, 스프링암, 캐릭터 무브먼트의 다섯가지 요소를 사용해 설정
    • 컨트롤러: 입력자의 의지(목표지점)을 지정할 때 사용. ControlRotation 속성
    • 폰: 폰의 트랜스폼을 지정
    • 카메라: 화면 구도를 설정하기 위해 사용. 주로 1인칭 시점에서 사용
    • 스프링 암: 화면 구도를 설정하기 위해 사용. 주로 3인칭 시점에서 사용
    • 캐릭터 무브먼트: 캐릭터의 이동과 회전을 조정하는 용도로 사용

폰의 이동 함수

  • Look 함수: 마우스 입력으로부터 컨트롤러의 컨트롤 회전을 설정
  • Move 함수: 컨트롤러의 컨트롤 회전으로부터 Yaw 값을 참고해 이동 방향을 설정
  • 콘솔 커맨드 창(단축키~) 으로부터 Control Rotation값을 확인할 수 있음
    • "DisplayAll PlayerController ControlRotation"
void AABCharacterPlayer::Move(const FInputActionValue& Value)
{
	FVector2D MovementVector = Value.Get<FVector2D>();

	const FRotator Rotation = Controller->GetControlRotation();
	const FRotator YawRotation(0, Rotation.Yaw, 0);

	const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
	const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);

	AddMovementInput(ForwardDirection, MovementVector.X);
	AddMovementInput(RightDirection, MovementVector.Y);
}

void AABCharacterPlayer::Look(const FInputActionValue& Value)
{
	FVector2D LookAxisVector = Value.Get<FVector2D>();

	AddControllerYawInput(LookAxisVector.X);
	AddControllerPitchInput(LookAxisVector.Y);
}

 

폰의 컨트롤 옵션

  • Use Controller Rotation (Yaw/Roll/Pitch)
  • 컨트롤러에 지정된 Control Rotation 값에 폰의 Rotation을 맞출 것인가?
  • 이 옵션을 키면 폰의 회전은 컨트롤러의 Control Rotation과 동기화됨
  • Desired Rotation = Control Rotation -> 일정 속도로 회전하는 것이 아닌 즉시 동기화

스프링암의 컨트롤 옵션

  • Use Pawn Control Rotation
  • Inherit (Yaw/Roll/Pitch)
  • Do Collision Test
  • 폰의 컨트롤 회전 (컨트롤러의 Control Rotation) 을 사용할 것인가?
  • 부모 컴포넌트 (주로 RootComponent) 의 회전을 그대로 따를 것인가?
  • 스프링암 중간에 장애물이 있으면 앞으로 당길 것인가? (Camera라는 트레이스 채널을 사용)
  • 3인칭 시점 설정에 주로 사용

마우스가 움직일 때 SpringArm이 같이 움직인다
장애물이 폰과 카메라 사이에 생겼을 때 카메라를 당겨주는 Do Collision Test

 

카메라의 컨트롤 옵션

  • Use Pawn Control Rotation
  • 폰의 컨트롤 회전 (컨트롤러의 Control Rotation) 을 사용할 것인가?
  • 스프링암에 달려있다면 스프링암의 회전과 함께 고려
  • 1인칭 카메라 회전에 주로 사용

 

캐릭터 무브먼트의 이동 옵션

  • Movement Mode : None, Walking, Falling
  • 땅(Ground) 위에 있으면 Walking 모드
  • 땅 위에 없으면 Falling 모드
  • 이동 기능을 끄고 싶으면 None 모드
  • 이동 모드에서의 이동 수치: MaxWalkSpeed
  • 폴링 모드에서의 점프 수치: JumpZVelocity

 

캐릭터 무브먼트의 회전 옵션

  • Rotation Rate: 회전 속도의 지정
  • Use Controller Desired Rotation : 컨트롤 회전을 목표 회전으로 삼고 지정한 속도로 돌리기
  • Orient Rotation To Movement : 캐릭터 이동 방향에 회전을 일치시키기
  • 폰의 회전 옵션과 충돌이 나지 않도록 주의

 

데이터 에셋

  • UDataAsset을 상속받은 언리얼 오브젝트 클래스
  • 에디터에서 에셋 형태로 편리하게 데이터를 관리할 수 있음
  • 캐릭터 컨트롤에 관련된 주요 옵션을 모아 에셋으로 관리

 

데이터 에셋의 관리

  • 두 가지의 컨트롤 모드를 제공
    • 현재 구현된 컨트롤 모드 : 3인칭 숄더뷰
    • 추가로 구현할 컨트롤 모드 : 3인칭 쿼터뷰
  • 입력키 v를 통해 컨트롤 설정을 변경 (배그에서도 v키로 1인칭<ㅡ>3인칭 변경이 가능했었다)
  • ENUM을 통해 두 개의 컨트롤 데이터를 관리

컨트롤 관리자라는 자료구조에서 두개의 에셋 데이터를 포함해서 관리

 

데이터 에셋의 구성과 적용

  • 각 섹션별로 데이터를 저장
    • Pawn 카테고리
    • 캐릭터 무브먼트 카테고리
    • 입력 카테고리
    • 스프링암 카테고리
  • Pawn과 캐릭터 무브먼트 데이터는 CharacterBase에서 설정
  • 입력과 스프링암 데이터는 CharacterPlayer에서 설정

 

뷰의 변환

  • 컨트롤을 변경할 때 서로 다른 입력 매핑 컨텍스트를 지정
  • 숄더뷰 : ShoulderMove와 ShoulderLook 사용
  • 쿼터뷰: QuaterMove만 사용 (마우스 회전에 따른 시점 이동 없기 때문)
  • 입력 액션 - V키를 사용해 변경

'Unreal 이론' 카테고리의 다른 글

캐릭터 애니메이션 설정  (0) 2024.10.21
캐릭터와 입력 시스템  (1) 2024.10.19
언리얼 엔진 게임 제작 기초  (0) 2024.10.14
언리얼 빌드 시스템  (1) 2024.10.03
언리얼 오브젝트 관리 - 패키지  (0) 2024.10.01

댓글()