Choose your operating system:
Windows
macOS
Linux
이전 단계 끝에서 기본 카메라 위치를 메시의 목 안쪽에 위치시켰었습니다. 이번 단계에서는 카메라 (위치나 시야같은) 프로퍼티 조정에 사용할 수 있는 적합한 FPS 카메라를 구성해 보도록 하겠습니다.
카메라 컴포넌트 붙이기
-
Visual Studio 로 돌아와서
FPSCharacter.h
를 열고 다음 코드를 추가합니다:// FPS 카메라 UPROPERTY(VisibleAnywhere) UCameraComponent* FPSCameraComponent;
-
FPSCharacter.h
는 이제 다음과 같은 모습일 것입니다:// 프로젝트 세팅의 설명 페이지에 저작권 문구를 채우세요. #pragma once #include "GameFramework/Character.h" #include "FPSCharacter.generated.h" UCLASS() class FPSPROJECT_API AFPSCharacter : public ACharacter { GENERATED_BODY() public: // 이 캐릭터 프로퍼티에 대한 기본값을 설정합니다. AFPSCharacter(); protected: // 게임 시작 또는 스폰시 호출됩니다. virtual void BeginPlay() override; public: // 매 프레임 호출됩니다. virtual void Tick( float DeltaSeconds ) override; // 입력에 함수성을 바인딩하기 위해 호출됩니다. virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; // 전후 이동을 처리합니다. UFUNCTION() void MoveForward(float Value); // 좌우 이동을 처리합니다. UFUNCTION() void MoveRight(float Value); // 키를 누르면 점프 플래그를 설정합니다. UFUNCTION() void StartJump(); // 키를 떼면 점프 플래그를 지웁니다. UFUNCTION() void StopJump(); // FPS 카메라 UPROPERTY(VisibleAnywhere) UCameraComponent* FPSCameraComponent; };
-
FPSCharacter.cpp
를 열고 생성자에 다음 코드를 추가합니다:// 일인칭 카메라 컴포넌트를 생성합니다. FPSCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera")); // 카메라 컴포넌트를 캡슐 컴포넌트에 붙입니다. FPSCameraComponent->SetupAttachment(GetCapsuleComponent());
이 코드는
UCameraComponent
를 생성하여 캐릭터의CapsuleComponent
에 붙입니다. -
이제 생성자에 방금 작성한 블록 아래 다음 코드를 추가합니다:
// 카메라 위치를 눈 살짝 위쪽으로 잡습니다. FPSCameraComponent->SetRelativeLocation(FVector(0.0f, 0.0f, 50.0f + BaseEyeHeight)); // 폰의 카메라 로테이션 제어를 허용합니다. FPSCameraComponent->bUsePawnControlRotation = true;
이 코드는 카메라의 위치를 캐릭터의 눈 위치 살짝 위쪽으로 잡으면서 폰이 카메라 로테이션을 제어할 수 있도록 해줍니다.
-
FPSCharacter.cpp
는 이제 다음과 같은 모습일 것입니다:// 프로젝트 세팅의 설명 페이지에 저작권 문구를 채우세요. #include "FPSProject.h" #include "FPSCharacter.h" // 기본값 설정입니다. AFPSCharacter::AFPSCharacter() { // 이 캐릭터가 TIck() 을 매 프레임 호출하도록 설정합니다. 필요치 않은 경우 끄면 퍼포먼스가 향상됩니다. PrimaryActorTick.bCanEverTick = true; // 일인칭 카메라 컴포넌트를 생성합니다. FPSCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera")); // 카메라 컴포넌트를 캡슐 컴포넌트에 붙입니다. FPSCameraComponent->SetupAttachment(GetCapsuleComponent()); // 카메라 위치를 눈 살짝 위쪽으로 잡습니다. FPSCameraComponent->SetRelativeLocation(FVector(0.0f, 0.0f, 50.0f + BaseEyeHeight)); // 폰의 로테이션 제어를 허가합니다. FPSCameraComponent->bUsePawnControlRotation = true; } // 게임 시작시 또는 스폰시 호출됩니다. void AFPSCharacter::BeginPlay() { Super::BeginPlay(); if (GEngine) { // 5 초간 디버그 메시지를 표시합니다. (첫 인수인) -1 "Key" 값은 이 메시지를 업데이트 또는 새로고칠 필요가 없음을 나타냅니다. GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("We are using FPSCharacter.")); } } // 매 프레임 호출됩니다. void AFPSCharacter::Tick( float DeltaTime ) { Super::Tick( DeltaTime ); } // 입력에 함수성을 바인딩하기 위해 호출됩니다. void AFPSCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); // 게임플레이 키 바인딩을 구성합니다. PlayerInputComponent->BindAxis("MoveForward", this, &AFPSCharacter::MoveForward); PlayerInputComponent->BindAxis("MoveRight", this, &AFPSCharacter::MoveRight); // 게임플레이 마우스 바인딩을 구성합니다. PlayerInputComponent->BindAxis("Turn", this, &AFPSCharacter::AddControllerYawInput); PlayerInputComponent->BindAxis("LookUp", this, &AFPSCharacter::AddControllerPitchInput); // 점프 동작 바인딩을 구성합니다. PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AFPSCharacter::StartJump); PlayerInputComponent->BindAction("Jump", IE_Released, this, &AFPSCharacter::StopJump); } void AFPSCharacter::MoveForward(float Value) { // 어느 쪽이 전방인지 알아내어 플레이어가 그 방향으로 이동하려 한다고 기록합니다. FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::X); AddMovementInput(Direction, Value); } void AFPSCharacter::MoveRight(float Value) { // 어느 쪽이 오른쪽인지 알아내어 플레이어가 그 방향으로 이동하려 한다고 기록합니다. const FVector Direction = FRotationMatrix(Rotation).GetScaledAxis(EAxis::Y); AddMovementInput(Direction, Value); } void AFPSCharacter::StartJump() { bPressedJump = true; } void AFPSCharacter::StopJump() { bPressedJump = false; }
새 카메라 테스트
이제 새로 구현한 카메라 코드를 컴파일하고 테스트할 차례입니다.
-
Visual Studio 에서
FPSCharacter
헤더 (*.h) 및 CPP (*.cpp) 파일을 저장합니다. -
Solution Explorer 에서 FPSProject 를 찾습니다.
-
FPSProject 에 우클릭 하고 Build 를 선택하여 프로젝트를 컴파일합니다.
-
빌드 완료 후 언리얼 에디터에서 FPSProject 를 엽니다.
-
레벨 에디터 툴바의 플레이 버튼을 클릭 합니다.
이제 카메라가 캐릭터 머리 살짝 위에 있을 것입니다.
-
Esc 키를 누르거나 레벨 에디터의 중지 버튼을 클릭 하여 에디터에서 플레이 (PIE) 모드를 빠져나갑니다.