언리얼 개인 프로젝트/언리얼엔진C++ 독학(이득우)

6.캐릭터 제작과 컨트롤_2)캐릭터 회전

현구구 2022. 3. 4. 19:03

프로젝트 세팅>엔진-입력에서 Turn 과 LookUp를 확인한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<ABCharacter.h>
#pragma once
 
#include "ArenaBattle.h" // = EngineMinimal.h
#include "GameFramework/Character.h"
#include "ABCharacter.generated.h"
 
UCLASS()
class ARENABATTLE_API AABCharacter : public ACharacter
{
    ...
private:
    void UpDown(float NewAxisValue);
    void LeftRight(float NewAxisValue);
    void LookUp(float NewAxisValue);
    void Turn(float NewAxisValue);
};
 
cs

 

ABCharcter 해더파일에 LookUp과 Turn 을 선언해준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<ABCharacter.cpp>
 
#include "ABCharacter.h"
 
...
// Called to bind functionality to input
void AABCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
    Super::SetupPlayerInputComponent(PlayerInputComponent);
    ...
    PlayerInputComponent->BindAxis(TEXT("LookUp"), this&AABCharacter::LookUp);
    PlayerInputComponent->BindAxis(TEXT("Turn"), this&AABCharacter::Turn);
}
 
...
 
void AABCharacter::LookUp(float NewAxisValue)
{
    AddControllerPitchInput(NewAxisValue);
}
 
void AABCharacter::Turn(float NewAxisValue)
{
    AddControllerYawInput(NewAxisValue);
}
cs

 

ABCharacter.cpp에서 Lookup과 Turn을 캐릭터에 붙여주고

아래 함수에서 정의를 해준다

AddController --- Input 함수는 캐릭터의 회전을 담당한다

AddControllerYawInput

AddControllerRollInput

AddController PitchInput 순서대로 Z축,X축,Y축으로의 회전이다.

컴파일하고 게임을 실행해보면 마우스의 움직임에 따라 시점이 회전하는 것을 알 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<AVCharacter.cpp>
 
 
void AABCharacter::SetControlMode(int32 ControlMode)
{
    if (ControlMode == 0)
    {
        SpringArm->TargetArmLength = 450.0f; //컨트롤 모드가 0일때 스프링암의 길이는 450
        SpringArm->SetRelativeRotation(FRotator::ZeroRotator);
        SpringArm->bUsePawnControlRotation = true;
        SpringArm->bInheritPitch = true;
        SpringArm->bInheritRoll= true;
        SpringArm->bInheritYaw = true;
        bUseControllerRotationYaw = false;
        GetCharacterMovement()->bOrientRotationToMovement = true;//방향에따른 움직임 설정(회전기능)
        GetCharacterMovement()->RotationRate = FRotator(0.0f,720.0f,0.0f);//회전속도 설정해서 자연스러운 회전 움직임
    }
}
cs

 

방향에 따라 회전하는 코드와 회전속도를 지정해서 자연스러운 움직임을 나타내는 코드를 추가하고 게임을 돌려보면 방향에 따라 움직임을 바꾸는 캐릭터를 볼 수 있다

이제 카메라 시점에 맞게 자연스럽게 회전하며 움직이는 캐릭터를 볼 수 있다.