2.5 - キャラクターのジャンプを実装する

FPS キャラクターのジャンプの実装方法を学びます。

Windows
MacOS
Linux

一般的にアクション マッピングでは、個別のイベントに対する入力を扱います。キーボード、マウス、およびコントローラーの入力を「フレンドリー ネーム」にマッピングします。この「フレンドリー ネーム」は後でゲームの動作 (移動など) にバインドすることができます。 最終的な効果としては、キー、マウスボタン、またはキーパッドボタンを押す (または解放する) と、特定のゲーム動作が直接トリガーされます。

このステップでは、キャラクターがジャンプする機能を追加します。そのために、スペースバーに対して入力アクションのマッピングを設定します。

ジャンプ アクションのマッピング

  1. [Edit (編集)] メニューで、 [Project Settings (プロジェクト設定)] をクリックします。

  2. [Project Settings] タブの左側にある [Engine] の見出しで、 [Input] をクリックします。

  3. [Bindings][Action Mappings] の隣にあるプラス記号をクリックします。

  4. [Axis Mappings] の左側にある矢印をクリックします。

  5. 表示されるテキスト欄に "Jump" と入力し、テキスト ボックスの左側の矢印をクリックしてアクション バインディングのオプションを展開します。

  6. ドロップダウン メニューで [Keyboard] ドロップダウン リストから [Space Bar] を選択します。

  7. 入力設定は以下のようになります。

    JumpActionMapping_SpaceBar.png

  8. [Project Settings] メニューを閉じます。

入力処理の実装

Character 基本クラスの interface ファイル (*.h) 内を見ると、ジャンプするキャラクターのビルトインのサポートがあることがわかります。 キャラクターのジャンプは、`bPressedJump` 変数に結び付けられているため、行うべきことは、ジャンプ アクションが押された場合に、その boolean 値を `true` に設定するだけです。 これを実行するには以下の 2 つの関数を追加する必要があります。

  • StartJump

  • StopJump

FPSCharacter クラスにコードを追加するには、Visual Studio に戻ります。

  1. FPSCharacter.h で、以下のパブリック関数宣言を追加します。

    // Sets jump flag when key is pressed (キー押下時のジャンプフラグを設定) 
    UFUNCTION()
    void StartJump();
    
    // Clears jump flag when key is released (キー解放時のジャンプフラグをクリア)
    UFUNCTION()
    void StopJump();
  2. FPSCharacter.h は以下のようになります。

    // Fill out your copyright notice in the Description page of Project Settings. (Project Settings の Description ページに著作権情報を入力してください) 
    #pragma once
    
    #include "GameFramework/Character.h"
    
    #include "FPSCharacter.generated.h"
    UCLASS()
    
    class FPSPROJECT_API AFPSCharacter : public ACharacter
    {
        GENERATED_BODY()
    public:
    
        // Sets default values for this character's properties. (このキャラクターのプロパティのデフォルト値を設定) 
        AFPSCharacter();
    protected:
    
        // Called when the game starts or when spawned (ゲーム開始時またはスポーン時に呼び出される)
        virtual void BeginPlay() override;
        public:
    
        // Called every frame (フレームごとに呼び出される)
        virtual void Tick( float DeltaSeconds ) override;
    // Called to bind functionality to input (機能と入力をバインドするために呼ばれます)
    
        virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
    // Handles input for moving forward and backward. (前後方向の移動の入力を処理) 
    
        UFUNCTION()
        void MoveForward(float Value);
    
        // Handles input for moving right and left. (左右の移動の入力を処理) 
        UFUNCTION()
        void MoveRight(float Value);
    
        // Sets jump flag when key is pressed (キー押下時のジャンプフラグを設定) 
        UFUNCTION()
        void StartJump();
    
        // Clears jump flag when key is released (キー解放時のジャンプフラグをクリア)
        UFUNCTION()
        void StopJump();
    };
  3. FPSCharacter.cpp で、以下の関数定義を追加します。

    void AFPSCharacter::StartJump()
    {
        bPressedJump = true;
    }
    void AFPSCharacter::StopJump()
    
    {
        bPressedJump = false;
    }
  4. 以下のコードを SetupPlayerInputComponent に追加し、ジャンプ アクションを新しく記述した関数にバインドします。

    // Set up "action" bindings. (アクションのバインディングをセットアップ) 
    PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AFPSCharacter::StartJump);
    PlayerInputComponent->BindAction("Jump", IE_Released, this, &AFPSCharacter::StopJump);
  5. FPSCharacter.cpp は以下のようになります。

    // Fill out your copyright notice in the Description page of Project Settings. (Project Settings の Description ページに著作権情報を入力してください) 
    #include "FPSProject.h"
    
    #include "FPSCharacter.h"
    // Sets default values (デフォルト値を設定) 
    
    AFPSCharacter::AFPSCharacter()
    {
        // Set this character to call Tick() every frame. (このキャラクターがフレーム毎に Tick() を呼び出すように設定します) You can turn this off to improve performance if you don't need it. (必要がなければパフォーマンスを向上させるためにオフにすることができます) 
        PrimaryActorTick.bCanEverTick = true;
    }
    
    // Called when the game starts or when spawned (ゲーム開始時またはスポーン時に呼び出される)
    
    void AFPSCharacter::BeginPlay()
    {
        Super::BeginPlay();
        if (GEngine)
    
        {
            // Put up a debug message for five seconds. (デバッグ メッセージを 5 秒間表示) The -1 "Key" value (first argument) indicates that we will never need to update or refresh this message. ( -1 のキー値 (最初の引数) は、このメッセージを更新、リフレッシュする必要がないことを示しています) 
            GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("We are using FPSCharacter."));
        }
    }
    // Called every frame (フレームごとに呼び出される)
    
    void AFPSCharacter::Tick( float DeltaTime )
    {
        Super::Tick( DeltaTime );
    }
    
    // Called to bind functionality to input (機能と入力をバインドするために呼ばれます)
    
    void AFPSCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
    {
        Super::SetupPlayerInputComponent(PlayerInputComponent);
    // Set up "movement" bindings. (移動のバインディングをセットアップ) 
    
        PlayerInputComponent->BindAxis("MoveForward", this, &AFPSCharacter::MoveForward);
        PlayerInputComponent->BindAxis("MoveRight", this, &AFPSCharacter::MoveRight);
    // Set up "look" bindings. (look のバインディングをセットアップ) 
    
        PlayerInputComponent->BindAxis("Turn", this, &AFPSCharacter::AddControllerYawInput);
        PlayerInputComponent->BindAxis("LookUp", this, &AFPSCharacter::AddControllerPitchInput);
    // Set up "action" bindings. (アクションのバインディングをセットアップ) 
    
        PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AFPSCharacter::StartJump);
        PlayerInputComponent->BindAction("Jump", IE_Released, this, &AFPSCharacter::StopJump);
    }
    void AFPSCharacter::MoveForward(float Value)
    
    {
        // Find out which way is "forward" and record that the player wants to move that way. (前進方向を確認し、プレイヤーがそちらの方向に移動するように記録) 
        FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::X);
        AddMovementInput(Direction, Value);
    }
    void AFPSCharacter::MoveRight(float Value)
    
    {
        // Find out which way is "forward" and record that the player wants to move that way. (右方向を確認し、プレイヤーがそちらの方向に移動するように記録) 
        FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::Y);
        AddMovementInput(Direction, Value);
    }
    void AFPSCharacter::StartJump()
    
    {
        bPressedJump = true;
    }
    void AFPSCharacter::StopJump()
    
    {
        bPressedJump = false;
    }

キャラクターのジャンプのテスト

新規で実装したキャラクターの移動の関数をコンパイルし、テストします。

  1. Visual Studio に FPSCharacter のヘッダ (*.h) と CPP (*.cpp) ファイルを保存します。

  2. [Solution Explorer (ソリューション エクスプローラ)][FPSProject] を探します。

  3. [FPSProject] 上で右クリックして [Build] を選択してプロジェクトをコンパイルします。

    BuildProject.png

  4. ビルドが終了したらアンリアル エディタで FPSProject を開きます。

  5. レベル エディタのツールバー で、[Play (プレイ)] ボタンをクリックします。マップ全体でジャンプできるようになります。

  6. [PIE (Play In Editor)] モードを終了するには、レベル エディタで Escape キーを押すか、[Stop] ボタンをクリックします。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback