【第5回】キャラクターのブループリント(インプットイベント)
- 概要
- キャラクターのブループリントを開く
- ノードを切り貼り・コピペする
- 【補足】ブループリントはメモ帳からコピペできる
- インプットアクション(イベント)
- インプットイベントを確認する
- 新しいインプットイベントを追加する
- インプットイベントの内容を作成する
- キャラクターのパラメータを変更する
- キーを押したとき移動パラメータを変更する
- インプットでパラメータを戻す
- 【補足】コメントを入れておこう
- 範囲コメントを記入する
概要
前回はブループリントの種類のひとつである「レベルブループリント」について学びました。また、使用頻度の高い機能である「Begin Play」イベントで、メッセージを繰り返し表示させる仕組みも学習できました。
今回は、プレイボタンを押したときに動作するプレイヤーキャラクターに処理を付与します。
キャラクターのブループリントを開く
キャラクターのブループリントを開いてみましょう。
コンテンツブラウザの「ThirdPersonBP」>「Blueprints」フォルダを開きます。
「ThirdPersonCharacter」というブループリントを確認できるでしょうか。
レベル上の「ThirdPersonCharacter」を右クリックして「アセットをブラウズ」を選択することで、当該フォルダへジャンプすることもできます。覚えておきましょう。
これがレベル内に置かれている「ThirdPersonCharacter」のブループリントです。
新たな「ThirdPersonCharacter」が配置されました。
もちろんこのままプレイしても、ふたつ同時に操作できるわけではありませんが、(レベルブループリントとは異なり)レベルに望むだけ設置できるということは覚えておきましょう。
もともと配置されていた「ThirdpersonCharacter」を削除しないように気をつけてくださいね。
では編集する前に、念のためバックアップをとっておきましょう。
ブループリントを複製します。該当ファイルを右クリックして「複製」を選ぶか、選択状態で「Ctrl+W」を押して複製できます。
リネームも可能ですので、わかりやすい名前をつけておいてください。
あらためて、コンテンツブラウザの「ThirdpersonCharacter」をダブルクリックしてブループリントエディタを開きます。
図のようなイベントグラフが表示されるはずです。
基本的な操作方法はレベルブループリントと変わりません。
さまざまなノードがたくさん見えてしまい不安になるかもしれませんが、読み解いていけば殆どが操作に関する簡単な処理ノードです。現時点では、理解できなくてもまったく問題ありません。
レベルブループリントになかった「ビューポート」と「コンポーネント」タブに着目しましょう。
「ビューポート」はその名前のとおり外見を目視で確認できるタブです。
タブを開くと、キャラクターの外見が表示されることがわかりますね。
レベル上でいうところの「アウトライナ」と同じツリー状で登録されています。
このブループリントに付与されているパーツ一覧を管理できる場所と考えると良いかもしれません。
たとえば「人間」というブループリントがあるとすると、それに付与する「洋服」、「当たり判定」、「武器」などがコンポーネントになります。
「コンポーネント」という言葉は、これからもよく出てくるので覚えておきましょう。
なお、まちがってパネルやタブを消してしまったときは
ウィンドウメニューの「ウィンドウ」項目から再度表示させることができます。イベントグラフを消した場合は、マイブループリントパネルの「イベントグラフ」をダブルクリックして再表示します。
ノードを切り貼り・コピペする
グラフに機能を追加したり、編集しながら学習していきましょう。
ひとまず前回のレベルブループリントを思い出しながら「Begin Play」の処理をつくります。
「Begin Play」イベントは、レベルブループリント以外の多くのブループリントでも使用可能で、それぞれ別々に動作します。
「Begin Play」イベントはレベル上に出現したとき最初に実行されると説明しましたね。
キャラクターのブループリントも同じです。
このキャラクターアクタ(ブループリント)は最初からレベルに存在しているので、プレイボタンを押したらすぐに実行されることになります。
さて、前回同様にグラフを右クリックして検索しても良いのですが…
面倒ですので、以前のノードをコピペ(切り取りと貼り付け)してみましょう。
レベルブループリントを開き、範囲選択したのち、右クリックから「切り取り」を選択しましょう。
つづけて「ThirdPersonCharacter」のBPを開きます。
任意の空いている場所を右クリックして「ここに貼り付け」を選択してペーストします。
切り取り「Ctrl + X」、貼り付け「Ctrl + V」 でも可能です。
このように、ブループリントはかなり柔軟に切り貼りが可能となっています。
ただし、すこし注意しなければならない点もあります。
ひとつは、貼り付け先に同名のノードがあった場合です。
そのようなとき、上記の「Begin Play」イベントの場合は、「Begin Play」部分がうまく貼り付けられません。
図のように別の「カスタムイベント」として貼り付けられてしまいますので注意してください。
カスタムイベントについては今後学習します。
もうひとつ、貼り付けられるノードは、貼り付け側に対応しているノードである必要があります。
今回の「Begin Play」や「Print String」などは比較的汎用的なノードのため可能でした。
……とはいえ、そもそも対応していないノードには「貼り付け」をしても反応しないので、貼り付け先が対応しているかどうかを頑張って覚える必要はありません。
貼り付けられなかったときに、そんな決まりがあったな程度に思い出せれば大丈夫です。
ではためしに、プレイボタンからゲームを実行して同様の動きになるか確認しましょう。
「Print String」が実行すれば成功です!
ブループリントを保存することもお忘れなく!
【補足】ブループリントはメモ帳からコピペできる
あまり使いませんが、雑学程度に。
ノードはコピーしてメモ帳などにペーストすることも可能です。
さらにこのテキスト化されたコードをコピーしてイベントグラフにペースト(戻す)こともできます。部分的にブループリントを渡したいときなどに有用かもしれません。
インプットアクション(イベント)
おおまかに確認したところで、「インプットアクション」を確認してみましょう。
「ThirdpersonCharacter」のイベントグラフを開きます。
すでにあるノードを確認してみてください。
さきほどの「Begin Play」を除き、すべて「インプット」という言葉から始まっているのがわかるでしょうか。これらは、コントローラーやキーボードをはじめとした「プレイヤーからの入力をトリガーにして開始する」イベントであることを示しています。
ここでは、これらを総じてインプットアクション(インプットイベント)と呼びます。
例として「インプットアクション Jump」を見てみましょう。
これはSpaceキーやゲームパッドのAを押すと(それがトリガーとなり)発行されるイベントとなっており、イベント実行後は、つながっている「Jump」ノードが実行される仕組みになっています。
インプットイベントを確認する
さて、いろいろなアクションを確認しましたが、Space キーやAボタン以外のキーでジャンプさせたり、異なるアクションを組み込んでみたいところですね。
ここでは「どんなインプットを起点にするか?」という設定、つまり「インプットアクション(イベント)」を新たに作成してみましょう。
メニューバーから「プロジェクト設定」を選んで開きます。
エンジン にある「インプット」という項目を選択しましょう。
「Jump」はSpaceキーだけでなく、ゲームパッドのボタンでも実行されるようになっていますね。
ためしに変更してみましょう。
変更するキーは何でも構いませんが、すでに使われているキーだとわかりづらいかもしれませんので注意してください。図では、ゲームパッドAボタンをキーボードの「K」キーに変更しました。
保存ボタンなどはなく、即座に変更されます。
変更したらレベルをプレイしてみましょう。
指定したキーでジャンプするはずです。
ジャンプするキーを追加してみましょう。
キーの追加はアクションマッピングの横にある「+」から行います。
新しいインプットイベントを追加する
インプットアクションには「アクションマッピング」と「軸マッピング」の二種類があり、先ほど編集したジャンプなどは「Pressed(押す)」「Released(離す)」を感知できる「アクションマッピング」イベントになります。
ゲームでは、スティックを少し倒すと歩かせる、全部倒すと走らせる…といったように、与えられた軸入力の大きさによって変化する機能などに使われます(今回はコントローラを使用しているわけではありませんでしたので割愛します)。
まずはわかりやすい「アクションマッピング」を使って慣れていきましょう。
アクションマッピングの隣りにある「+」を押します。
「新規アクションマッピング_0」という新しいインプットイベントが追加されることを確認してください。好きな名前をつけておきます(英語で設定することをオススメします)。
ここでは「New Action」としました。
もちろんあとからいくらでも変更できますので、好きにつけてしまいましょう。
つづけて、対応するキーを指定します。
わかりやすくするため、既に割り当てられているキーは避けてください。
図では「左Shiftキー」を登録しています。
インプットイベントの内容を作成する
つづけて内容を作成していきましょう。
作成したアクションはすぐにイベントとして活用できます。
「ThirdpersonCharacter」ブループリントを再び表示してください。
イベントグラフの任意の場所を右クリックして、先ほど作成したインプット名で検索します。
検索でヒットしたら選択して配置します。
ためしに「Print String」を配置して接続してみましょう。
「Pressed」の実行ピンにつなげてください。
「Pressed」はキーが押されたときに処理が流れます。
コンパイルしてプレイしてみましょう。
設定したキーを押したとき「Print String」が実行されれば成功です。
補足ですが、プレイボタンを押したときにマウスアイコンが出ている状態ではプレイウィンドウにフォーカスされていないため入力全般が効かない状態ですので注意しましょう(一度クリックすればキーで動けるようになる)
起動時にUI操作ができるようにという配慮なのですが、なかなかストレスですよね……。
この操作が不要になる仕組みについては別の章で説明します。
余裕があるときに作成してみてください。
キャラクターのパラメータを変更する
CharacterクラスとはPawnクラスをさらに二足歩行のキャラクター動作用に拡張させたクラスです。「クラス??」と疑問が出てくるかもしれませんが、現状ではとくに急いで覚える必要ありません。気にせずそのまま進みましょう。ブループリントの右上に「Character」と書いてあるブループリントがそれに属す程度に覚えておいてください。
右側の詳細パネルを確認してみましょう。
移動に関するさまざまな値があります。名前で何を指しているか予想がつくかもしれませんね。
対応して動きが変化することを確認できるはずです。
キーを押したとき移動パラメータを変更する
インプットイベントで先ほどの移動パラメータを変更してみましょう。
配置したインプットアクション以降に追加します。
キーを押している間は移動速度(Max Walk Speed)が増加するような仕組みにしてみます。
コンポーネントパネルから「CharacterMovement」をイベントグラフ(の「Print String」付近)にドラッグ&ドロップしてください。
図のように「Get」ノードが表示されたでしょうか?
これで「CharacterMovement」コンポーネントの参照が作成できました。
ここから、先ほど変更した移動パラメータ全般の情報を読み込んだり、書き込むことができます。
コンポーネント(のGetには)、中にある情報がほぼすべて入っていて参照できると考えてください。
これは重要なことなので、覚えておきましょう。
「Get」の出力ピンを左クリックしてドラッグし、ワイヤーを伸ばします。
検索ウィンドウに「Max Walk Speed」と検索してください。
必ず「Get」の出力ピンからワイヤーを伸ばして検索ウィンドウを開いてください。
右クリックからの検索ウィンドウでは絞り込みが行われずうまく検索できないことがあります。
図のように「Max Walk Speed」パラメータに関する検索結果がヒットするはずです。
「Get Max Walk Speed」と「Set Max Walk Speed」の二種類がありますね。
ここでは「Set Max Walk Speed」を選びましょう。
UE4では基本的に、情報を得たいときは「Get ~」、情報を与えたいときは「Set~」で始まるノードを使用します。これは非常に重要なので覚えておいてください。
つまりこの「Get Max Walk Speed」からは現在のMax Walk Speedの情報を取得することができ、「Set Max Walk Speed」では、新たな「Max Walk Speed」の情報を指定することができます。
さて、このままでは処理が繋がっていませんので、直前の「Print String」と接続しましょう。
現時点では「Max Walk Speed」の値は「0.0」指定されています。
現在値の2倍である「1200」を設定してみましょう。
ちなみに、ここで設定した「Max Walk Speed」は処理ではなく、所謂「変数」のノードです。
変数については追って学習していく予定ですので、ここでは処理ノードと区別せず使っていきましょう。パラメータ(プロパティ)そのものを書き換えているくらいに考えてください。
もともとの値はそのままなので、起動するたび値は初期値に戻ります。
永続的に(起動時から)変更したい場合は「コンポーネント」の詳細パネルから値を変更したり、「Begin Play」に接続して、起動時に上書きされるようにします。
インプットでパラメータを戻す
プレイ中であれば停止して、ブループリントに戻ってください。
次はキーを離したとき「Max Walk Speed」を元に戻す処理を入れてみましょう。
キーを離したときの処理は「Released」実行ピンに接続します。
プレイして、キーを押しているときだけ最大速度が変化することを確認しましょう。
これで仕組みは完成! 今回は以上です。
余裕があれば、別のインプットアクションをつくって、そこで他のパラメータ変数を変えるような仕組みも作ってみましょう。今回はいったんここまで。次回以降、もう少し改変していく予定です。
おつかれさまでした!
【補足】コメントを入れておこう
ノード自体にコメントを記入
ノード自体にコメントを記入するには、対象のノードにマウスオーバーして、ノードの上に出てくるフキダシアイコンをクリックします。好きなように記入してみましょう。
範囲コメントを記入する
範囲コメントは、コメントしたいノードを選択した状態で、右クリックメニューから「選択からコメントを作成」を選ぶか、ショートカット「C」キーを押して作成します。
ちなみに入力IMEについてですが、どうもWindows IMEでの日本語入力時に処理が固まるなど安定しないことが多いので個人的には、それ以外をオススメしています(Google 日本語変換など)。