Language:
Page Info
Skill Level:
Engine Version:

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

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

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

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

  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] ボタンをクリックします。