サードパーソン ブループリント ゲーム入門 (13) – キャラクター ブループリント キーボードとマウスのコントロール

ビデオの内容紹介 
前々回 (サードパーソン ブループリント ゲーム入門 (11) – アニメーション ブループリントの EventGraph) は、キャラクターの動きを判定して速度の変数に値を入れるまでをアニメーション ブループリントのイベントグラフで組みました。そして、前回 (サードパーソン ブループリント ゲーム入門 (12) – キャラクター ブループリントのコンポーネント) は、その値を供給するキャラクターブループリントを作りました。今回は、そのキャラクターブループリントのイベントグラフで、キーボードやマウスで入力された値がキャラクターに伝わるようにします。

原題 Introduction to Third Person Blueprint game – 13 – Character Blueprint : Keyboard and Mouse Controls

[1] 前進の入力
キーボードの W、S (など) によって MoveForward が入力されると、その動き (Movement) がキャラクターに伝わるようにします。

まず、メインエディタのコンテンツ ブラウザで、Character フォルダを選択状態にして、MyCharacter をダブルクリックして開きます。
13-1
EventGraph を開きます。
13-3
スペースで右クリックして、[軸イベント] の MoveForward (前進) を選択します。
13-4
InputAxisMoveForward というイベントが設置されました。
13-4-2
これは、MoveForward という Axis (軸=制御の軸となるもの) が入力されると、右側の白い実行ピンにつながっているものが発動するものです (今はまだ何もつながれてませんが) 。

ところで、この Axis は、サードパーソン ブループリント ゲーム入門 (5) 入力関係の準備で既に用意してあります。
13-4-3
青く囲ったものが Axis です。オレンジ色が Key です。Key を使うと、Axis が入力されることになります。今回は、この青い Axis のうち、MoveForward、MoveRight、Trun、LookUp の入力について処理して行きます (アニメーション ブループリントに連絡できるようにします)。

話を元に戻します。スペースで右クリックして AddMovementInput を選択します。
13-5

この AddMovementInput という関数は、指定された方向 (World Direction) に動き (movement) をそのポーン (この場合、キャラクター) に追加 (add) する機能があります。

キーワード AddMovementInput
少し詳しく見てみます。AddMovementInput は、Pawn クラスに含まれている関数です。たとえば、APawn というドキュメンテーションでは、Functions (関数) 一覧に AddMovementInput 関数が入っています (APawn クラスは、プログラミング言語 C++ による Pawn クラスのことです。ブループリントの裏側と考えてください)。Achracter クラスはこの APawn クラスの子クラスなので、この AddMovementInput 関数も継承されます。

本線に戻ります。InputAxis MoveForward の実行ピンを AddMovementInput の実行ピンと結びつけます。つまり、InputAxis MoveForward が起動すると、AddMovementInput が実行されることになります。Scale Value は、すでに決まっています。
13-6-2
1.0 は、大きくも小さくもないので、動かした分がそのまま AddMovementInput に渡されます。マイナスの値は反対方向に動くことになります。

次に、World Direction (ワールド空間における方向) に入れる値を作ります。つまり、World Direction は、どちらの方向に前進すると良いかを定めるものです。まず、GetControlRotation (コントローラーの回転を取得する) という関数を使います。
13-7
13-8
コントローラーとは、Pawn クラス (この場合は Character クラス) をコントロールする実体的なクラスのことです。まだ Character クラスが動く前の段階のことなので、Cotroller クラスとなっています。もっと具体的に言えば、プレイヤーがキーボードを使ってキャラクター (Character クラス) を動かそうとする時に使うクラスです。そのクラスの回転を取得しています。

次に、BreakRot を使ってこの回転を分解します。
13-9
13-10
Pitch、Yaw、Roll の成分に分解して、Yaw だけを使いたいからです。Yaw は地面に平行な回転のことで、ビューポートでは青色になります。
13-10-2
次に、MakeRot を使って新たな回転を作成します。
13-11
13-13
(Yaw は Yaw につなぎます。)
ここで、Pitch と Roll には何も値を供給しません。つまり 0.0 のままにしておきます。するとどういうことになるかと言うと、地面に平行にしかキャラクターの向きだけが考慮されることになります。

次に、GetForwardVector を使って、角度をベクターに直します。(なお、キャラクターを回転させていない場合の Get Forward Vector の値は (1,0,0) です。キャラクターを正反対方向に回転させると、(-1, 0, 0) となります。)
13-14
これが方向となります。だから、AddMovementInput の World Direction につなぐことができます。
13-15

[2] 右方向移動の入力
キーボードの A、D (など) によって MoveRight が入力されると、その動き (Movement) がキャラクターに伝わるようにします。

スペースを右クリックして、イベント MoveRight を選びます。
13-16
13-17
これも先に作った Axis の MoveRight のことです。
13-18
さらに、World Direction は先に作ったものを利用します。どの時点でもキャラクターの向きは 1 つしかないですから。
13-20
13-19

以上をひとまとめにして、コメントを付けて後から見ても分かるようにしておきます。(コメントは、左クリックしながら範囲指定して、C を押します。)
13-21

[3] 横方向の回転を入力
マウスの X ボタンによって Turn が入力されると、その回転 (Yaw) がキャラクターに伝わるようにします。(TurnRate などは後回しにします。まずは、キーボードとマウス関係に限定してブループリントをセットアップします。)

まず、スペースを右クリックして、Turn イベントを出します。
13-22
13-23

これを AddControllerYawInput につなぎます。
13-24
この AddControllerYawInput は、コントローラーに Yaw を追加します。つまり、これによって、キャラクターが回転するようになります。
13-25

[4] カメラの上下方向の回転を入力
マウスの Y ボタンによって LookUp が入力されると、その回転 (Pitch) がキャラクターに伝わるようにします。(LookUpRate などは後回しにします。)

スペースを右クリックして、LookUp イベントを出します。
13-26
13-27
さらに AddControllerPitchInput につなぎます。
13-28
AddControllerPitchInput によって、カメラが上下方向に回転するようになります。
13-29
これらをまとめて、コメントを付けておきます。
13-30

[5]ジャンプの入力
キーボードのスペースバーによって Jump が入力されると、キャラクターがジャンプします。

まず、Jump イベントを出します。
13-31
13-32
キーボードのスペースバーを押すと、Jump イベントが発生するので、その実行ピンに、キャラクターをジャンプさせる関数 Jump をつなげます。
13-33
13-34
ジャンプはこれだけです。最後にコメントを付けておきます。
13-36

全体を完成図として表示して今回はお終いです。お疲れ様でした!
完成図
13-37



シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. blendegg より:

    自分の環境では特にデフォルトで割り当てられているキーがなかったのですが、プレイモード時には上下左右キーで画面を動かせます。
    他にどの部分が、このデフォルトのキーを制御している可能性があるでしょうか?

  2. blendegg より:

    なるほど、そちらの設定にあったんですね。
    試してみます、たびたび失礼しました。

  3. blendegg より:

    こんにちはいつも参考にさせてもらっています。
    キー制御をしていてハマってしまったんですが、デフォルトでupキー割り当てられているblueprintって何でしょうか?
    再生すると上下左右キーを使うことで、画面をグリグリ動かせますが、この動きと、新たに追加したblueprintが競合してしまいます。

    • なつのや より:

      blendegg さん、こんにちは。
      ゆっくりしていってくださいね。

      ご質問を私が正しく理解していましたら、「デフォルトでupキー割り当て」を行うものは、ブループリントではなく、メインメニューの [編集] (Edit) にある [プロジェクトの設定] (Project Settings) の [Input] だと思います。

      image for question

      もしも、たとえば、Upキーを前進(MoveForward) にバインディングしたくない場合は、Upキー横についている×ボタンをクリックします。(その後、Upキーを別の動作にバインディングするためには、その希望の動作の項目に行って展開して、+ボタンをクリックしてからバインディングします。)

      以下は蛇足ですが、もし、言語を日本語にしてお使いの場合は、誤って「↑」 が PageUp キーのことになっているようですので、注意が必要です。