Unreal Engine5でキー(軸マッピング)を設定する(C++)

プレイ可能なPawnクラスのC++ファイルを生成して、キーマップにより関数を呼び出す方法について簡単にまとめる。

軸マッピングの追加

今回はテストとしてX方向に加速する機能を追加する。

  1. 編集>プロジェクト設定を開く
  2. エンジン>インプットを開く
  3. 軸マッピングにAccelXを追加する

    AccelXの横の+マークを押すと対応したキーを追加できる。
    今回はWを押した時に前に、Sを押した時に後ろに行ってほしいので、Wには1.0,Sには-1.0を設定した。

Pawnクラスの作成



TestPawn.hTestPawn.cppが生成されればOK。

Pawnクラスと軸マッピングの紐づけ

TestPawn.hの設定

public: の中に加速用の関数を設定する。

// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
void AccelX(float value);

//加速させるためのコリジョン付き空オブジェクト
UPROPERTY(VisibleAnywhere,BlueprintReadOnly, Category="Components", meta = (AllowPrivateAccess = "true"))
class UCapsuleComponent* CapsuleComp;

TestPawn.cppの設定

  1. 以下のライブラリをファイルの先頭に記述する。
    #include "Components/CapsuleComponent.h"
    #include "Components/StaticMeshComponent.h"
    
  2. ATestPawn::ATestPawn()に以下のように記述する。
    ATestPawn::ATestPawn()
    {
        // Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
        PrimaryActorTick.bCanEverTick = true;
        CapsuleComp = CreateDefaultSubobject<UCapsuleComponent>(TEXT("Capsule Collider"));
        RootComponent = CapsuleComp;
    }
    
  3. SetupPlayerInputComponentの中に以下のように記述し、軸マッピングを紐づける
    // Called to bind functionality to input
    void ATestPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
    {
        Super::SetupPlayerInputComponent(PlayerInputComponent);
        PlayerInputComponent->BindAxis(TEXT("AccelX"),this,&ATestPawn::AccelX);
    }
    
  4. 1.の下に以下のような関数を設定する
    void ATestPawn::AccelX(float value){
        FVector DeltaLocation = FVector::ZeroVector;
        FVector velocity = GetVelocity();
        CapsuleComp->AddForce(FVector(10000.0*value,0.0,0.0));
    }
    

C++ファイルのコンパイル

画面右下のテトリスみたいなボタンを押してコンパイルを実行する。

成功すると、コンテンツドロワー>All>C++クラス>プロジェクト名 の中にTestPawnが生成されている。

ブループリントの作成

TestPawnを右クリックし、「TestPawnに基づくブループリントクラスを作成します」を選択する

ここでは適当に「BP_TestPawn」と名前を付けた。

上手く生成できると、以下のようにCapsule Compが表示される。

ブループリントの編集

ここから、再生ボタンを押して操作可能なカメラとオブジェクトを追加していく。

コンポーネントの追加

  1. コンポーネントの「+追加」ボタンから「SpringArm」を検索して追加する
  2. SpringArmを選択した状態で同様にCameraを追加する
  3. Capsule Compを選択した状態で同様にSphereを追加する

上記の手順を終えると以下のようになる。

コンポーネントの編集

まず、Capsule Componentが物理に従うよう設定する

  1. Capsule Compの詳細タブ>物理内の「Simulate Physics」にチェックを入れる
  2. 同様に詳細タブ>コリジョン内のコリジョンプリセットを「PhysicsActor」に設定する

次に、SpringArmの動きに制限をかける

  1. SpringArmの詳細タブ>カメラセッティング内のInherit~のチェック3つを全て外す

Pawn Classの設定

ゲームを始めるときに上記で設定したボールをプレイヤーとして出現させる必要があるため、その方法を以下に示す。

  1. 編集>プロジェクト設定>マップ&モードを開く
  2. 選択したゲームモード>Default Pawn Classを「BP_TestPawn」に設定する

以上で設定は全て完了!

動作確認

メイン画面に戻り再生ボタンを押すと、設定したボールが出てきてプレイできるようになる。Wキーを押すと前に、Sキーを押すと後ろに移動する。

まとめ

ここでは簡単な操作可能な球をC++で設定する方法についてまとめた。