開始する前に
前のセクション「プロジェクトを設定してコンパイルする」で次の目標を達成したことを確認します。
カスタム ゲーム モード C++ クラスで一人称視点テンプレートに基づくプロジェクトを作成した。
プロジェクトで Enhanced Input システムを使用していることを確認した。
新しいキャラクターを設定する
カスタム ゲーム モードで新しい C++ プロジェクトを設定したら、 新しいキャラクター クラスを追加してブループリントに拡張し、ゲーム モードのデフォルト プレイヤー ポーンとして設定します。
C++ キャラクター クラスを作成する
アクタ アセットは、レベルに配置できる任意のオブジェクトです。 ポーンはプレイヤーまたは AI が制御できるアクタであり、キャラクターはプレイヤー キャラクターとして使用される特殊なタイプのポーンです。 これらのアクタ クラスの詳細については、UE のゲームプレイ フレームワークのドキュメントに記載されているアクタ、ポーン、キャラクター クラスの情報を参照してください。
新しいキャラクター クラスを作成してプロジェクトに C++ を追加するには、次の手順を実行します。
エディタのメイン メニューで、[Tools] > [New C++ Class] の順に移動します。
[Choose Parent Class] ウィンドウで、[Character (キャラクター)] を見つけて選択してから [Next] をクリックします。
新しいクラスの名前 (このチュートリアルでは
AdventureCharacterを使用) を入力してから [Create Class] をクリックします。Unreal Engine が Visual Studio (VS) で自動的に新しいクラス ファイルを開きます。 VS に切り替えて新しいファイルを見つけます。
VS から自動的にプロジェクトのリフレッシュを求められない場合は、Unreal Editor で [Tools] > [Refresh Visual Studio (Visual Studioをリフレッシュ)] の順に移動します。
ブループリントに C++ キャラクターを拡張する
ゲーム モードで実行したのと同じように、コンテンツ ブラウザでキャラクター クラスを右クリックして [Create Blueprint class based on <CharacterName> (<CharacterName> に基づいたブループリント クラスを作成)] を選択し、「Blueprints」フォルダでそのキャラクターのブループリントを作成します。
デフォルト プレイヤー キャラクターを変更する
インゲームで新しいキャラクターを使用するには、プロジェクトのゲーム モードで使用されるデフォルト ポーン クラスとして設定します。
キャラクターをデフォルト プレイヤー キャラクターとして設定するには、次の手順を実行します。
ゲーム モード ブループリントがまだ開いていない場合は、コンテンツ ブラウザで新しいブループリントをダブルクリックしてブループリント エディタで開きます。
ブループリントの [Details (詳細)] パネルで [Classes (クラス)] を展開します。 使用するこのゲームモードのさまざまなデフォルト クラスはここで設定できます。
[Default Pawn Class (デフォルトポーンクラス)] をキャラクター ブループリント (
BP_AdventureCharacter) に変更します。ウィンドウ左上の [Save (保存)] ボタンをクリックしてゲーム モード ブループリントを保存してから、[Compile] をクリックします。
入力アクションを試してみる
一人称視点テンプレートのデフォルト キャラクターは、一連の既存の入力アクションをブループリントと組み合わせて使用し、キャラクターが動き回ったり、ジャンプしたり、周りを見回したりするようにします。
これらの入力アクションを開いて試し、各入力アクションがどのようにキャラクターの動きを支えているのかを学びます。
コンテンツ ブラウザのアセット ツリーで、「Content」 > 「Input」 > 「Actions」フォルダの順に移動します。 それぞれがジャンプする、見る、動き回るという動作に対応する、IA_Jump、IA_Look、IA_Move という 3 つの入力アクションが表示されます。
IA_Jump をダブルクリックして開き、その [Details] パネルを確認します。
このキャラクターの入力アクションは、次のプロパティを使用してアクションのタイプと動作を定義します。
プロパティ | 説明 |
値型 | この入力アクションに含まれる値の型を決定します。 この入力アクションでキャプチャする移動のタイプに応じて値型を選択します。 たとえば、 Axis1D は、1 次元移動 (スクロールインとスクロールアウト) かスカラー調整 (移動速度の変更) をキャプチャする浮動小数値です。 Axis2D は、WSAD 制御などの 2 次元移動をキャプチャする 2 つの浮動小数のベクターです。 Axis3D は、飛行制御やスイミング制御などの 3 次元移動をキャプチャする 3 つの浮動小数のベクターです。 |
トリガー | ブループリントかコードでトリガーを使用してロジックをビルドできるよう、これらのトリガーを作成してアクションの考えられるステートを表します。 |
モディファイア | UE が受け取ってから任意の入力トリガーに送信する raw 入力値を変更します。 |
入力マッピング コンテキストを試してみる
入力アクションは単独では機能せず、どのボタンがどのようなコンテキストでそれらをトリガーするのかを知るには、入力マッピング コンテキストが必要です。 これは、入力アクションのトリガーのルールを示すマッピングのコレクションです。 複数の入力マッピング コンテキストを作成してカスタマイズし、ゲームのニーズに合わせて動的にオンオフを切り替えることができます。
デフォルト キャラクターには、すでにコンテンツ ブラウザの「Content」 > 「Input」に入力マッピング コンテキストが用意されています。 IMC_Default をダブルクリックして開き、その [Details] パネルを表示します。
IMC_Default には、3 つの各入力アクションをユーザー入力にマッピングする 3 つのマッピングが含まれており、 各マッピングによって入力アクションのトリガーとモディファイアが制御されます。
ジャンプ アクションをマッピングする
[IA_Jump] のマッピングを展開します。 Space Bar (スペース バー) と Gamepad Face Button Bottom (ゲームパッド フェイス ボタン下) という 2 つの制御バインディングがあることがわかります。 インゲームでこれらのボタンのいずれかを押すと IA_Jump がトリガーされます。
キーボード キーで 2D 移動をマッピングする
次に、[IA_Move] を展開し、WASD キー、矢印キー、ゲームパッドの左サムスティックに対応する 9 個のバインディングを表示します。
いくつかの個別のキーから 2 次元移動を作成するには、シンプルなブールのジャンプより少しだけ多くの設定が必要です。
キーを押すのは 1 次元であり、押さないときは値 0、押したときは値 1 が返されます。 これは D または右矢印キーで最適に機能しますが、その理由は、それらのキーによってキャラクターが X 軸に沿って正の方向 (つまり右方向) に移動するためです。 ただし、キャラクターは前、左、後方向にも移動させる必要があります。 つまり、X 軸と Y 軸の両方で値 0 から 1 と値 0 から -1 が必要です。
そのため、すべての方向の移動を作成する値を取得するために、入力アクションでは Modifiers (モディファイア) を使用して入力値を別の軸や負の値に変換します。
たとえば、[A] 制御バインディングとその [Modifiers] を展開し、それがどのように設定されているのかを確認すると、 Negate (ネゲート) モディファイアがあることがわかります。 これは、キーが押されると値 1.0 が -1.0 にネゲートされ、キャラクターが X 軸に沿って (つまり左方向に) 移動します。
[Negate] モディファイアを展開すると、X、Y、または Z 軸の値を否定するかどうかを指定できます。 これらはすべてデフォルトで有効になっていますが、ニーズに応じて特定の軸に対する否定を制限できます。
ここで [S] 制御バインディングを展開します。 Y 軸での後方向への移動を作成するために、このバインディングには、入力を X 軸から Y 軸に変更する Swizzle Input Axis Values (スイズル入力軸値) と Negate の 2 つのモディファイアがあります。
[Swizzle Input Axis Values] モディファイアを展開します。 [Order (順序)] オプションでは、軸の値がどのように並べ替えられるのかを指定します。 このケースでは、入力アクションで YXZ を使用しているため、X 軸と Y 軸はデフォルトの XYZ の順序から入れ替えられます。
ゲームパッドで 2D 移動をマッピングする
ゲームパッドのサムスティックでは、1D ボタンの押下ではなく入力に 2D 軸を使用するため、このマッピングでは、サムスティックの動きを制御する 1 つの制御バインディングのみが必要です。
Gamepad Left Thumbstick 2D-Axis (ゲームパッド左サムスティック 2D 軸) の [Modifiers] を展開すると、Dead Zone (デッド ゾーン) モディファイアと Scalar (スカラー) モディファイアが表示されます。
Dead Zone では、上回った場合と下回った場合に入力が無視されるしきい値を指定します。 このしきい値を使用して、スティックが真ん中にないか指の圧力が小さいために意図した動きにならないことが多い、サムスティックの中心に近い小さい入力値を除外します。
Scalar では、キャラクターが各方向に移動する速度を制御できるよう、X、Y、Z 軸の各値をどれだけ乗じるのかを指定します。
ゲームパッドとマウスで注視制御をマッピングする
IA_Look のアクション マッピングを展開します。 この入力アクションは、Gamepad Right Thumbstick 2D-Axis (ゲームパッドの右サムスティックの 2D 軸) 制御にバインドされます。
エラーを除外するためにデッド ゾーン モディファイアのみが必要となります。
デフォルト キャラクターには、マウスベースのカメラ制御用に別のマッピング コンテキストがあります。 コンテンツ ブラウザに戻って「IMC_MouseLook」を開きます。 この IMC は、IA_Look と同一である IA_MouseLook 入力アクションのバインディングを作成します。
サムスティックとマウスの入力アクションを個別に使用することで、それぞれの入力に異なるモディファイアを使用して、それらを個別の入力パスとして扱うことができます。 ただし、このチュートリアルではすべてを 1 つの入力マッピング コンテキストに結合します。
IA_MouseLook のアクション マッピングを展開します。 この入力アクションは、Mouse XY 2D-Axis (マウス XY 2D 軸) 制御にバインドされます。
マウス制御バインディングではすでに 2D 軸が使用されているため、必要なモディファイアは、マウスを上に動かすとキャラクターが下を向くようにする Y 軸 Negate のみです。 これは以前から一人称視点のゲームで使用されていますが、このモディファイアを削除することで注視制御を反対にできます。
入力マッピング コンテキストを変更する
新規プロジェクトを開始したばかりであるため、すべての入力マッピングを 1 つの入力マッピング コンテキストに結合します。
デフォルト プレイヤーのマッピング コンテキストに基づいて独自の IMC を作成するには、次の手順を実行します。
コンテンツ ブラウザの、「Content」 > 「Input」フォルダで「
IMC_Default」を右クリックし、[Duplicate (複製)] を選択します。マッピング コンテキストに「
IMC_Adventure」と名前を付けて、ダブルクリックして開きます。IA_Look のマッピングを展開します。
[IA_Look] の横の [+] ボタンをクリックし、新しい制御バインディングを追加します。
[None (なし)] をクリックしてキー値リストを開き、[Mouse (マウス)] を展開し、[Mouse XY 2D-Axis (マウスXY 2D軸)] を選択します。
マウスの制御バインディングで、[Modifiers (モディファイア)] の横の [+] ボタンをクリックし、[None] を [Negate] に変更します。
Index [0] モディファイアを展開し、[X] と [Z] を選択解除します。 このモディファイアは、Y 軸のみを無効にします。
マッピング コンテキストを保存して閉じます。
カメラ制御を反転するには、サムスティックまたはマウス制御のバインディングから Negate モディファイアを追加または削除します。
次の内容
次のセクションでは、デフォルト キャラクターのブループリントがどのようにプレイヤーの入力をキャラクターの移動につなげ、コードでその再作成を開始するのかを学びます。
キャラクターの移動を設定する
C++ でプレイヤーの入力をキャラクターの移動にバインドする方法を学びます。