【第6回】変数を使う
- 概要
- 値の確認と改修内容
- 基本値をBegin Playで保存する
- 変数の作成
- 変数の上書き
- 処理順を考慮して変数の上書きノードを接続する
- インプット処理を修正する
- 【補足】もうひとつの変数作成方法
- 【補足】変数のゲット・セットのショートカットキー
- 【補足】変数を「Print String」で確認しよう
- 【補足】算術演算子
概要
前回はキャラクターのインプットアクションイベントを作成し、キーを押している間だけ移動速度が変更されるようにしました。
このままでも構わないのですが、設定した値がすべてブループリント上に直打ちされているという状況は、管理もしづらく、つくりとしてあまり良いとはいえません。
今回は変数を学習しながら、その辺りを改善していきましょう。
値の確認と改修内容
前回、パラメータの基本値は「CharacterMovement」コンポーネントの詳細タブから
「Max Walk Speed」の項目から確認できることを学びました。
これが起動時の移動能力の初期値になります。
このインプットのイベントを、「変数」を学びながら次のように改修してみましょう。
- ゲーム開始時に移動力の初期値を変数に保存する。
- キー入力時、基本値の2倍の値が格納された変数を参照してパラメータを上書きする。
- キーを離した時、保存した初期値に戻るようにする。
基本値をBegin Playで保存する
移動力(Max Walk Speed)の値は、「Begin Play」イベントで保存します。
「Begin Play」はゲームプレイ開始時に自動で実行されるイベントであるため、あとあと値を変えるパラメータなどの初期値を保存しておくのに比較的適しています。
キャラクターの「Begin Play」を確認しましょう。
前回から変更していなければ図のようになっているはずです。
「Begin Play」付近に、「Max Walk Speed」を変更したときを思い出しながら「CharacterMovement」コンポーネントの参照(Getノード)を配置してください。
そして、出力ピンからワイヤーを伸ばして、「Max Walk Speed」と検索します。
すると以前見たように「Get」と「Set」から始まる変数が検索にヒットしました。
今回は初期値の情報を得たいので「Get Max Walk Speed」を選びます。
これで「CharacterMovement」コンポーネントの中にある「Max Walk Speed」の値を取得することができました。あとはゲーム起動時にこの値を保存すれば「初期値を保存した」ことになりますね。
値を保存するために変数を使います。
変数とは、いわば「情報を入れておく箱・場所」だと考えてください。
その情報は、基本的にそれがレベルに存在する限り、各ブループリント上で保持されます。
情報とは「文字」「数値」「真か偽か」「参照情報」「位置」などなどで、入っている情報を得たり、入れ替えたりすることができます。
作成してみましょう。
変数の作成
マイブループリントパネルを確認してください。
変数という項目があるので、項目の「+」ボタンにマウスオーバーします。
図のように「+変数」と変化しますのでボタンを押しましょう。
すでに変数を作成していなければ図のような「NewVar_0」という変数が作成されるはずです。
好き名前をつけて決定しましょう。
名前は日本語でも問題ありません…が、英語表記をオススメします。
ここまでできたら、(変数を選択している状態で)詳細パネルを確認してください。
ここで「変数の型」を変更します。
変数は、ほとんどの情報を保存できる機能を持っていますが、格納する情報の種類と変数の種類が一致している必要があります(「型が一致している」必要があります)。
数字しか保存できないと決めた箱に、文字を入れようとしても入らないのです。
「Max Walk Speed」の値は、数値の情報で「Float」型と呼ばれる型です。しかし、いま作成した変数の型は「Boolean」と呼ばれる型になっていて、そこに入れられる情報は「True(真)」か「False(偽)」という二種類しか格納することができません。
Float型(数値)は入らないということですね。格納できるよう変更してみましょう。
詳細パネルの「変数の型」と書いてあるプルダウンを押しましょう。
ここから変数の型を変更できます。
「Float」を選びましょう。
図のように「Max Walk Speed」と同じグリーンの「Float」型に変更されたでしょうか。
変数の型変更を確定するため、コンパイルしましょう。
変数の初期値(デフォルト値)が入力できるようになったはずです。
今回は、起動後すぐに別の値(Max Walk Speed)で上書きしてしまうため、とくに変更しません。
変数の上書き
つぎはこの変数を上書きするためにイベントグラフ上に呼び出します。
マイブループリントパネルの変数から、イベントグラフにドラッグ&ドロップしてください。
「Get ~~」「Set~~」を選ぶミニウィンドウが出現します。
今回は情報を書き換えたいので「Set」を選びます。
変数のSetノードが配置できました。
そして、作成した「Max Walk Speed」のGet 出力ピンを作成した変数の入力ピンに接続します。
これでSetノードが実行されたら上書きが実行されるようになりました。
注意しなければならないのが、Get と異なり Set には 実行ピンがあるということです。
このSetノードの実行ピンに処理が流れなければ、ノードの上書き処理は実行されません。
はじめのうちはしばしば、実行ピンが接続されておらず「データがなぜか書き換わらない…」というミスをしがちですので、気をつけましょう!
処理順を考慮して変数の上書きノードを接続する
変数のSetノードを「Begin Play」の処理に接続するのですが、ここでも注意する点があります。
「Begin Play」の最後尾にある「Print String」ノードに接続しても意図したとおりになりません。
それは、ノードの途中に「Delay」ノードがあるからです。
「Delay」ノードの機能は、処理の流れを一定時間待機させることですが、この待機が問題です。
あくまでも待機するのは「Begin Play」の処理だけなので、「Delay」が実行されている間でもキャラクターを動かしたりインプットアクションを実行したりできてしまうのです。
これでは、ゲーム開始後すぐに値を保持(格納)するという目的が達成されません。
もちろん「Print String」の一連の処理を削除すればいいのですが、今回はそのままにして正しく実行する方法を考えてみましょう。
もっとも簡単なやりかたは、「Delay」ノードよりも前に処理を差し込むことです。
図のように変更しましょう。
Delayよりも前に格納する処理が完了するようになりました。
インプット処理を修正する
前回作成したインプット処理を確認します。
作成した変数をゲットしましょう。方法はセットしたときと同じです。
「Begin Play」でこの変数には「Max Walk Speed」の初期値が保存される予定です。
ではキーを押したとき、保存した初期値の変数を2倍にしたものが代入されるようにしてみましょう。
作成した変数の出力ピンからワイヤーを伸ばして「*」と検索し「float * float」を配置します。
これは受け取ったfloat値を乗算するノードです。
2倍にしたいので、ノードの引数には2.0を入れます。
何倍でも構いませんが0のままでは0が出力されることになってしまいます。
そして変更ノードのセット「Max Walk Speed」ノードの入力ピン(引数)に接続しましょう。
これで変数を使った最大速度が初期値の2倍になる処理ができました!
キーを離した時の処理でもとに戻す処理をつくって完成させましょう。
初期値は保存されているため、変数を接続するだけですね。
図のように接続して、コンパイル(&保存)してプレイしてみましょう。
これで変数の基礎は終了です。
おつかれさまでした!
【補足】もうひとつの変数作成方法
変数は入力ピン、出力ピンからワイヤーを伸ばして、ダイレクトに作成することも可能です。
かなり便利な方法ですので、余裕があれば覚えておきましょう!
出力ピンから変数を作成する
入力ピンから変数を作成する
【補足】変数のゲット・セットのショートカットキー
- 変数ゲット(Get):Ctrl キーを押しながら、変数をドラッグ&ドロップ
- 変数セット(Set):Alt キーを押しながら、変数をドラッグ&ドロップ
【補足】変数を「Print String」で確認しよう
実装をしていると、変数に値を代入したときなどに値を確認したいときがあります。
そんなときは「Print String」を使うと簡単です。
「Print String」の「In String」入力ピンには、直接打ち込むだけでなく「String」型(といわれる文字列専用)の変数などを接続して表示させることが可能です。
たとえば図のセット変数「Default Max Walk Speed」では、代入されている値(float型)を出力ピンから取得できるのですが、これを「Print String」の「In String」にドラッグ&ドロップしてみましょう。
なんと自動で「Float」型を「String」型に変換して接続してくれます。
他の型であっても、「String」型に変換すれば、入力ピンに接続できてしまうんですね。
【補足】算術演算子
本稿では「乗算」の演算を行いましたが、もちろんそれ以外の算術演算も行うことができます。
上記の「Print String」を使いながら確認してみましょう。
ひとまず以下の演算を覚えておけば大丈夫です。
加算・減算
乗算・除算・剰余
もちろんGet変数を接続したり、複数の演算子を重ねることも可能です。
実践までする必要ありませんが、そういうものがあるんだな、くらいに記憶しておいてください。
その他、論理演算や比較演算などは、作りながら別途学んでいく予定です!