2.5 - 캐릭터 점프 구현

일인칭 슈팅 캐릭터에 점프 구현법을 배워봅니다.

Windows
MacOS
Linux

일반적으로 액션 매핑은 별도의 이벤트에 대한 입력을 다루며, 입력을 "친근한 이름"에 매핑시켜 나중에 이벤트 주도형 동작에 바인딩시킬 수 있도록 해줍니다. 최종 효과는 키나 마우스 버튼이나 키패드 버튼 누르기 및/또는 떼기가 바로 게임 동작을 발동시키도록 하는 것입니다.

이번 단계에서는, 스페이스 바에 대한 액션 매핑을 구성하여 캐릭터에 점프 능력을 추가하도록 하겠습니다.

점프 액션 매핑

  1. 편집 메뉴의 프로젝트 세팅클릭 합니다.

  2. 프로젝트 세팅 탭 왼편의 엔진 제목줄 아래 입력클릭 합니다.

  3. 바인딩 아래 액션 매핑 옆 더하기 부호를 클릭 합니다.

  4. 액션 매핑 왼편의 화살표를 클릭 합니다.

  5. 뜨는 글상자에 Jump 라 입력한 다음, 글상자 왼쪽의 화살표를 클릭 하여 액션 바인딩 옵션을 펼칩니다.

  6. 드롭다운 메뉴의 키보드 드롭다운 목록에서 Space Bar 를 선택합니다.

  7. 이제 입력 세팅이 다음과 같아 보일 것입니다:

    JumpActionMapping_SpaceBar.png

  8. 프로젝트 세팅 메뉴를 닫습니다.

입력 처리 구현

Character 베이스 클래스에 대한 인터페이스 (*.h) 파일 안을 보면, 캐릭터 점프에 대한 지원이 내장되어 있는 것을 볼 수 있습니다. 캐릭터 점프는 bPressedJump 변수에 묶여 있어서, 점프 동작을 누르면 부울을 true 로, 떼면 false 로 설정해 주기만 하면 됩니다. 그렇게 하기 위해 다음의 두 함수를 추가해야 합니다:

  • StartJump

  • StopJump

Visual Studio 로 돌아가 FPSCharacter 클래스에 코드를 추가합니다.

  1. FPSCharacter.h 에서 다음의 공용 함수 선언부를 추가합니다:

    // 키를 누르면 점프 플래그를 설정합니다.
    UFUNCTION()
    void StartJump();
    
    // 키를 떼면 점프 플래그를 지웁니다.
    UFUNCTION()
    void StopJump();
  2. FPSCharacter.h should now look like the following:

    // 프로젝트 세팅의 설명 페이지에 저작권 문구를 채우세요.
    
    #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();
    };
  3. FPSCharacter.cpp 에서 다음 함수 선언부를 추가합니다:

    void AFPSCharacter::StartJump()
    {
        bPressedJump = true;
    }
    
    void AFPSCharacter::StopJump()
    {
        bPressedJump = false;
    }
  4. 이제 SetupPlayerInputComponent 에 다음 함수를 추가하여 새로 작성된 함수에 점프 액션을 바인딩합니다:

    // "action" 바인딩을 구성합니다.
    PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AFPSCharacter::StartJump);
    PlayerInputComponent->BindAction("Jump", IE_Released, this, &AFPSCharacter::StopJump);
  5. FPSCharacter.cpp 가 이제 다음과 같아 보일 것입니다:

    // 프로젝트 세팅의 설명 페이지에 저작권 문구를 채우세요.
    
    #include "FPSProject.h"
    #include "FPSCharacter.h"
    
    // 기본값을 설정합니다.
    AFPSCharacter::AFPSCharacter()
    {
        // 이 캐릭터가 매 프레임 Tick() 을 호출하도록 설정합니다. 필요치 않은 경우 끄면 퍼포먼스가 향상됩니다.
        PrimaryActorTick.bCanEverTick = 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);
    
        // "movement" 바인딩을 구성합니다.
        PlayerInputComponent->BindAxis("MoveForward", this, &AFPSCharacter::MoveForward);
        PlayerInputComponent->BindAxis("MoveRight", this, &AFPSCharacter::MoveRight);
    
        // "look" 바인딩을 구성합니다.
        PlayerInputComponent->BindAxis("Turn", this, &AFPSCharacter::AddControllerYawInput);
        PlayerInputComponent->BindAxis("LookUp", this, &AFPSCharacter::AddControllerPitchInput);
    
        // "action" 바인딩을 구성합니다.
        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)
    {
        // 어느 쪽이 오른쪽인지 알아내어, 플레이어가 그 방향으로 이동하려 한다고 기록합니다.
        FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::Y);
        AddMovementInput(Direction, Value);
    }
    
    void AFPSCharacter::OnStartJump()
    {
        bPressedJump = true;
    }
    
    void AFPSCharacter::OnStopJump()
    {
        bPressedJump = false;
    }

캐릭터 점프 테스트

이제 새로 구현된 캐릭터 동작 함수를 컴파일하고 테스트할 차례입니다.

  1. Visual Studio 에서 FPSCharacter 헤더 (*.h) 및 CPP (*.cpp) 파일을 저장합니다.

  2. Solution Explorer 에서 FPSProject 를 찾습니다.

  3. FPSProject우클릭 한 다음 Build 를 선택하여 프로젝트를 컴파일합니다.

    BuildProject.png

  4. 빌드 완료 후, 언리얼 에디터에서 FPSProject 를 엽니다.

  5. 레벨 에디터 툴바의 플레이 버튼을 클릭 합니다. 맵에서 점프가 가능할 것입니다.

  6. Esc 키를 누르거나 레벨 에디터의 중지 버튼을 클릭 하여 에디터에서 플레이 (PIE) 모드를 빠져나갑니다.

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼