UNREAL→LABØ

Unreal Engine4の情報をまとめます。

【第5回】キャラクターのブループリント(インプットイベント)

 

概要

前回はブループリントの種類のひとつである「レベルブループリント」について学びました。また、使用頻度の高い機能である「Begin Play」イベントで、メッセージを繰り返し表示させる仕組みも学習できました。

 

今回は、プレイボタンを押したときに動作するプレイヤーキャラクターに処理を付与します。 

f:id:miccak:20210426182216p:plain

 

 

キャラクターのブループリントを開く

キャラクターのブループリントを開いてみましょう。

コンテンツブラウザの「ThirdPersonBP」>「Blueprints」フォルダを開きます。
「ThirdPersonCharacter」というブループリントを確認できるでしょうか。

 

レベル上の「ThirdPersonCharacter」を右クリックして「アセットをブラウズ」を選択することで、当該フォルダへジャンプすることもできます。覚えておきましょう。

f:id:miccak:20210426225746p:plain

 

f:id:miccak:20210426182325p:plain

これがレベル内に置かれている「ThirdPersonCharacter」のブループリントです。

 

ためしに、レベル上へドラッグ&ドロップしてみましょう。

f:id:miccak:20210426182350p:plain

新たな「ThirdPersonCharacter」が配置されました。

もちろんこのままプレイしても、ふたつ同時に操作できるわけではありませんが、(レベルブループリントとは異なり)レベルに望むだけ設置できるということは覚えておきましょう。

 
今回は不要なので削除しておきます。削除は「Delete」キーを押すだけです。
もともと配置されていた「ThirdpersonCharacter」を削除しないように気をつけてくださいね。
 

では編集する前に、念のためバックアップをとっておきましょう。

 

ブループリントを複製します。該当ファイルを右クリックして「複製」を選ぶか、選択状態で「Ctrl+W」を押して複製できます。

 

リネームも可能ですので、わかりやすい名前をつけておいてください。

f:id:miccak:20210426182537p:plain


あらためて、コンテンツブラウザの「ThirdpersonCharacter」をダブルクリックしてブループリントエディタを開きます。

 
レベルにいるのは「ThirdpersonCharacter」ですので、間違えないように気をつけましょう。
図のようなイベントグラフが表示されるはずです。

f:id:miccak:20210426182607p:plain

基本的な操作方法はレベルブループリントと変わりません。

さまざまなノードがたくさん見えてしまい不安になるかもしれませんが、読み解いていけば殆どが操作に関する簡単な処理ノードです。現時点では、理解できなくてもまったく問題ありません。

レベルブループリントになかった「ビューポート」と「コンポーネント」タブに着目しましょう。

「ビューポート」はその名前のとおり外見を目視で確認できるタブです。
タブを開くと、キャラクターの外見が表示されることがわかりますね。

f:id:miccak:20210426182636p:plain

どんな外見にするかなどの管理しているのが「コンポーネント」タブです。
レベル上でいうところの「アウトライナ」と同じツリー状で登録されています。
このブループリントに付与されているパーツ一覧を管理できる場所と考えると良いかもしれません。
 
たとえば「人間」というブループリントがあるとすると、それに付与する「洋服」、「当たり判定」、「武器」などがコンポーネントになります。

 

コンポーネント」という言葉は、これからもよく出てくるので覚えておきましょう。

 
なお、まちがってパネルやタブを消してしまったときは
ウィンドウメニューの「ウィンドウ」項目から再度表示させることができます。
 
ビューポートタブを消した場合は、コンポーネントパネルから任意のコンポーネントをダブルクリックして再表示。
 
イベントグラフを消した場合は、マイブループリントパネルの「イベントグラフ」をダブルクリックして再表示します。
 
 

ノードを切り貼り・コピペする

グラフに機能を追加したり、編集しながら学習していきましょう。

ひとまず前回のレベルブループリントを思い出しながら「Begin Play」の処理をつくります。
「Begin Play」イベントは、レベルブループリント以外の多くのブループリントでも使用可能で、それぞれ別々に動作します。

 

「Begin Play」イベントはレベル上に出現したとき最初に実行されると説明しましたね。
キャラクターのブループリントも同じです。
このキャラクターアクタ(ブループリント)は最初からレベルに存在しているので、プレイボタンを押したらすぐに実行されることになります。

 

さて、前回同様にグラフを右クリックして検索しても良いのですが…
面倒ですので、以前のノードをコピペ(切り取りと貼り付け)してみましょう。

 

レベルブループリントを開き、範囲選択したのち、右クリックから「切り取り」を選択しましょう。

つづけて「ThirdPersonCharacter」のBPを開きます。
任意の空いている場所を右クリックして「ここに貼り付け」を選択してペーストします。

切り取り「Ctrl + X」、貼り付け「Ctrl + V」 でも可能です。

f:id:miccak:20210426183108g:plain

このように、ブループリントはかなり柔軟に切り貼りが可能となっています。

ただし、すこし注意しなければならない点もあります。

 

ひとつは、貼り付け先に同名のノードがあった場合です。
そのようなとき、上記の「Begin Play」イベントの場合は、「Begin Play」部分がうまく貼り付けられません。

f:id:miccak:20210426183220p:plain

 

図のように別の「カスタムイベント」として貼り付けられてしまいますので注意してください。

カスタムイベントについては今後学習します。

 

もうひとつ、貼り付けられるノードは、貼り付け側に対応しているノードである必要があります。
今回の「Begin Play」や「Print String」などは比較的汎用的なノードのため可能でした。

 

……とはいえ、そもそも対応していないノードには「貼り付け」をしても反応しないので、貼り付け先が対応しているかどうかを頑張って覚える必要はありません。

貼り付けられなかったときに、そんな決まりがあったな程度に思い出せれば大丈夫です。

 

ではためしに、プレイボタンからゲームを実行して同様の動きになるか確認しましょう。
「Print String」が実行すれば成功です!

ブループリントを保存することもお忘れなく!

【補足】ブループリントはメモ帳からコピペできる

あまり使いませんが、雑学程度に。
ノードはコピーしてメモ帳などにペーストすることも可能です。

f:id:miccak:20210426183447p:plain

さらにこのテキスト化されたコードをコピーしてイベントグラフにペースト(戻す)こともできます。部分的にブループリントを渡したいときなどに有用かもしれません。

 

インプットアクション(イベント)

おおまかに確認したところで、「インプットアクション」を確認してみましょう。

「ThirdpersonCharacter」のイベントグラフを開きます。


すでにあるノードを確認してみてください。

 

さきほどの「Begin Play」を除き、すべて「インプット」という言葉から始まっているのがわかるでしょうか。これらは、コントローラーやキーボードをはじめとした「プレイヤーからの入力をトリガーにして開始する」イベントであることを示しています。

 

ここでは、これらを総じてインプットアクション(インプットイベント)と呼びます。


例として「インプットアクション Jump」を見てみましょう。

 

これはSpaceキーやゲームパッドのAを押すと(それがトリガーとなり)発行されるイベントとなっており、イベント実行後は、つながっている「Jump」ノードが実行される仕組みになっています。

 

「Jump」ノードはキャラクター専用のノードで、キャラクターをジャンプさせる機能を持ちます。

f:id:miccak:20210426183559p:plain

なんとなく想像がつけば大丈夫。その他のインプットアクションも、なんらかの操作を起点にして実行されるイベントです。
 
ノードを切ってプレイしてみると、該当のアクションは動作しなくなるので理解しやすいかもしれません。気になる方は、どのインプットがどれに対応しているか確認してみてください!
 
 

インプットイベントを確認する

さて、いろいろなアクションを確認しましたが、Space キーやAボタン以外のキーでジャンプさせたり、異なるアクションを組み込んでみたいところですね。

ここでは「どんなインプットを起点にするか?」という設定、つまり「インプットアクション(イベント)」を新たに作成してみましょう。


メニューバーから「プロジェクト設定」を選んで開きます。

ユーザーがアップロードした画像:image.png

f:id:miccak:20210426183711p:plain

ここではプロジェクトに関する様々な設定を確認・変更できます。
エンジン にある「インプット」という項目を選択しましょう。

f:id:miccak:20210426183725p:plain

「Bindings」項目の「アクションマッピング」「軸マッピング」ツリーを開いてください。

f:id:miccak:20210426183735p:plain

先ほどイベントグラフ上にあったインプットアクション(イベント)が存在することに気づいたでしょうか。「Jump」ツリーを見てみましょう。

f:id:miccak:20210426183748p:plain

ご想像がつくかもしれませんが、ここでは「なんのキーを起点にするか」の設定を行っています。
「Jump」はSpaceキーだけでなく、ゲームパッドのボタンでも実行されるようになっていますね。
 
もちろん、これらは変更可能です。
ためしに変更してみましょう。

f:id:miccak:20210426183809p:plain

変更するキーは何でも構いませんが、すでに使われているキーだとわかりづらいかもしれませんので注意してください。図では、ゲームパッドAボタンをキーボードの「K」キーに変更しました。

 

保存ボタンなどはなく、即座に変更されます。
変更したらレベルをプレイしてみましょう。
指定したキーでジャンプするはずです。

 

ジャンプするキーを追加してみましょう。
キーの追加はアクションマッピングの横にある「+」から行います。

f:id:miccak:20210426183845p:plain

なお、すでに登録されているインプットイベントはすべて、「ThirdPersonTemplate(サードパーソン・テンプレート)」に入っている機能のひとつです。別のテンプレートを選んで起動した場合は図のようには登録されていませんのでご注意ください。
 
 

新しいインプットイベントを追加する

つづいて、新しくカスタムしたインプットイベントを作ってみましょう。
 

インプットアクションには「アクションマッピング」と「軸マッピング」の二種類があり、先ほど編集したジャンプなどは「Pressed(押す)」「Released(離す)」を感知できる「アクションマッピング」イベントになります。

f:id:miccak:20210426183929p:plain

 
対して、軸マッピングはスケール値を設定できるのが特徴で、軸(Axis)の値をスケール値の定数として機能させます。簡単にいえば、ゲームパッドのアナログスティックを少しだけ倒したときは「0.1」、全部倒すと「1.0」になり、逆方向に倒すと「-1.0」が感知できます。
 

f:id:miccak:20210426183952p:plain

ゲームでは、スティックを少し倒すと歩かせる、全部倒すと走らせる…といったように、与えられた軸入力の大きさによって変化する機能などに使われます(今回はコントローラを使用しているわけではありませんでしたので割愛します)。


まずはわかりやすい「アクションマッピング」を使って慣れていきましょう。


アクションマッピングの隣りにある「+」を押します。

f:id:miccak:20210426184032p:plain
f:id:miccak:20210426184038p:plain


「新規アクションマッピング_0」という新しいインプットイベントが追加されることを確認してください。好きな名前をつけておきます(英語で設定することをオススメします)。

ここでは「New Action」としました。

もちろんあとからいくらでも変更できますので、好きにつけてしまいましょう。

f:id:miccak:20210426184107p:plain

つづけて、対応するキーを指定します。

わかりやすくするため、既に割り当てられているキーは避けてください。
図では「左Shiftキー」を登録しています。

f:id:miccak:20210426184119p:plain

 

インプットイベントの内容を作成する

つづけて内容を作成していきましょう。

作成したアクションはすぐにイベントとして活用できます。

 

「ThirdpersonCharacter」ブループリントを再び表示してください。
イベントグラフの任意の場所を右クリックして、先ほど作成したインプット名で検索します。
検索でヒットしたら選択して配置します。

f:id:miccak:20210426184212p:plain


ためしに「Print String」を配置して接続してみましょう。
「Pressed」の実行ピンにつなげてください。
「Pressed」はキーが押されたときに処理が流れます。

f:id:miccak:20210426184345p:plain

コンパイルしてプレイしてみましょう。

設定したキーを押したとき「Print String」が実行されれば成功です。

f:id:miccak:20210426184401p:plain

補足ですが、プレイボタンを押したときにマウスアイコンが出ている状態ではプレイウィンドウにフォーカスされていないため入力全般が効かない状態ですので注意しましょう(一度クリックすればキーで動けるようになる)

起動時にUI操作ができるようにという配慮なのですが、なかなかストレスですよね……。


この操作が不要になる仕組みについては別の章で説明します。
余裕があるときに作成してみてください。

 

 

キャラクターのパラメータを変更する

このブループリント「ThirdpersonCharacter」が属する親クラス「Character」は、移動全般を簡単に調整するパラメータや処理が備わっています。それを変更して移動能力やジャンプを調整してみましょう。
 
CharacterクラスとはPawnクラスをさらに二足歩行のキャラクター動作用に拡張させたクラスです。「クラス??」と疑問が出てくるかもしれませんが、現状ではとくに急いで覚える必要ありません。気にせずそのまま進みましょう。
ブループリントの右上に「Character」と書いてあるブループリントがそれに属す程度に覚えておいてください。

f:id:miccak:20210426185046p:plain

 
コンポーネントパネルの「CharacterMovement」を選択しましょう。
このコンポーネントが「Character」の能力を制御していると考えてください。

f:id:miccak:20210426185101p:plain

右側の詳細パネルを確認してみましょう。

移動に関するさまざまな値があります。名前で何を指しているか予想がつくかもしれませんね。

f:id:miccak:20210426185117p:plain

 
まず覚えておきたいメジャーなパラメータを挙げておきます。
今回はこの値を変えてみてください。プレイして確認してみましょう。
対応して動きが変化することを確認できるはずです。
  • Gravity Scale :キャラクターの重力
  • Max Acceleration:キャラクターの加速力
  • Max Walk Speed:キャラクターの最大移動速度
  • Jump Z Velocity:キャラクターのジャンプ力
  • Air Control :キャラクターの空中制御力
 
 

キーを押したとき移動パラメータを変更する

インプットイベントで先ほどの移動パラメータを変更してみましょう。

配置したインプットアクション以降に追加します。

キーを押している間は移動速度(Max Walk Speed)が増加するような仕組みにしてみます。

コンポーネントパネルから「CharacterMovement」をイベントグラフ(の「Print String」付近)にドラッグ&ドロップしてください。

f:id:miccak:20210426185515g:plain

 

図のように「Get」ノードが表示されたでしょうか?

これで「CharacterMovement」コンポーネントの参照が作成できました。
ここから、先ほど変更した移動パラメータ全般の情報を読み込んだり、書き込むことができます。

コンポーネント(のGetには)、中にある情報がほぼすべて入っていて参照できると考えてください。
これは重要なことなので、覚えておきましょう。

 

「Get」の出力ピンを左クリックしてドラッグし、ワイヤーを伸ばします。
検索ウィンドウに「Max Walk Speed」と検索してください。

f:id:miccak:20210426185615p:plain

必ず「Get」の出力ピンからワイヤーを伸ばして検索ウィンドウを開いてください。
右クリックからの検索ウィンドウでは絞り込みが行われずうまく検索できないことがあります。

f:id:miccak:20210426185635g:plain

図のように「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」の情報を指定することができます。

 

f:id:miccak:20210426185728p:plain

 

さて、このままでは処理が繋がっていませんので、直前の「Print String」と接続しましょう。

現時点では「Max Walk Speed」の値は「0.0」指定されています。
現在値の2倍である「1200」を設定してみましょう。

f:id:miccak:20210426185744p:plain

コンパイルしプレイしてみましょう。
キーを入力しながら移動したときキャラクターが加速していれば正しく設定できています。
 
ちなみに、ここで設定した「Max Walk Speed」は処理ではなく、所謂「変数」のノードです。
変数については追って学習していく予定ですので、ここでは処理ノードと区別せず使っていきましょう。パラメータ(プロパティ)そのものを書き換えているくらいに考えてください。
 
もちろん、このパラメータ上書き処理は、プレイ中だけ上書きされるものです。
もともとの値はそのままなので、起動するたび値は初期値に戻ります。
永続的に(起動時から)変更したい場合は「コンポーネント」の詳細パネルから値を変更したり、「Begin Play」に接続して、起動時に上書きされるようにします。
 
 

インプットでパラメータを戻す

プレイ中であれば停止して、ブループリントに戻ってください。
次はキーを離したとき「Max Walk Speed」を元に戻す処理を入れてみましょう。

キーを離したときの処理は「Released」実行ピンに接続します。

f:id:miccak:20210426185835p:plain
 
同じようにノードを設置して、変数ノードの内容を書き換えればすぐに完成します。

f:id:miccak:20210426185853p:plain

プレイして、キーを押しているときだけ最大速度が変化することを確認しましょう。
これで仕組みは完成! 今回は以上です。

 

余裕があれば、別のインプットアクションをつくって、そこで他のパラメータ変数を変えるような仕組みも作ってみましょう。今回はいったんここまで。次回以降、もう少し改変していく予定です。

 

おつかれさまでした!

 
 

【補足】コメントを入れておこう

ノードがなにをしているか、わかりやすくするためにコメント機能を活用しましょう。
 


ノード自体にコメントを記入 

ノード自体にコメントを記入するには、対象のノードにマウスオーバーして、ノードの上に出てくるフキダシアイコンをクリックします。好きなように記入してみましょう。 

f:id:miccak:20210426225407p:plain

 

 

範囲コメントを記入する

範囲コメントは、コメントしたいノードを選択した状態で、右クリックメニューから「選択からコメントを作成」を選ぶか、ショートカット「C」キーを押して作成します。

f:id:miccak:20210426225455p:plain
f:id:miccak:20210426225501p:plain

 

ちなみに入力IMEについてですが、どうもWindows IMEでの日本語入力時に処理が固まるなど安定しないことが多いので個人的には、それ以外をオススメしています(Google 日本語変換など)。