22.Boolean型の変数とは?
🐈:今回はBoolean型の変数について解説します。また実践としてBoolean型の変数を使用して処理を分岐させるという処理を作っていきます。
Boolean型の変数とは?
https://scrapbox.io/files/65b6275053b5b000254455e3.jpg
Boolean型とは、「true」または「false」のどちらか一方のデータを入れる変数になります。例えばどんなデータとして利用するかというと、プレイヤーが生きているか(true)死んでいるか(false)判断したり、スイッチのオン(true)オフ(false)、コインの表(true)裏(false)など2つの情報しか存在しないデータとして使用する時にBoolean型の変数を使用します。このBoolean型は処理の分岐によく使用されます。
🌟Step1:Boolean型の変数を作成してみよう
①変数のプラスボタンから変数を作成して、名前を「IsDead」にして型がBooleanになっている事を確認します。
https://scrapbox.io/files/65b62863a33f900027c449cd.gif
「IsDead」と命名した理由は後から「プレイヤーが死んだ状態かどうか」のデータとして利用するためです。進めていきましょう。
次にコンパイルしてIsDeadの変数を選択した状態で、デフォルト値を確認します。
https://scrapbox.io/files/65b628b343f296002d595159.jpg
Booleanのチェック項目について
Booleanの型は「true」または「false」のデータどちらか一方のデータを入れる変数です。チェックが入っている状態がtrue,チェックが入っていない状態はfalseを示しています。
https://scrapbox.io/files/65b62a4f479b1c002320ab53.jpg
デフォルトではチェックが入っていない状態(false)になっています。
🐈:Boolean型は、文字のString型や整数のInteger型と違って、このようにチェック項目によってデータ内容が表現されます。
まずはテキスト表示して確認してみましょう。BeginPlayとPrintStringをレベルブループリントに作成します。
https://scrapbox.io/files/65b62ae8a885330025a79f6b.jpg
IsDeadをGetで追加して、PrintStringのInStringピンに接続します。変換ノードは自動で作成されます。
https://scrapbox.io/files/65b62affa885330025a79fae.jpg
コンパイルしてプレイしてみてみましょう。falseとテキスト表示されました。
https://scrapbox.io/files/65b62b241b2ac50024fcc89a.jpg
IsDead変数のデフォルト値はチェックなしの状態、つまりfalseの状態でしたね。そのIsDead変数をPrintStringでテキスト表示すると中身のデータ「false」がテキスト表示される形になります。
https://scrapbox.io/files/65b62b49fce52c0024b295a7.jpg
🐈:では今度はBoolean型をtrueにして確認してみましょう。
もう一度レベルブループリントに戻ってIsDeadを選択した状態でデフォルト値にチェックを入れます。
https://scrapbox.io/files/65b62b8753b5b00025447cd1.jpg
プレイしてみるとtrueが表示されました。
https://scrapbox.io/files/65b62bb10c408800244e6f8b.jpg
🌟Step2:Boolean型の変数を使って処理分岐させてみよう
Boolean型の変数はどんな時に使用するのでしょうか?最も使用するパターンがBrachノードを使用した処理分岐させる場合に使用します。
IsDeadのデフォルト値はチェックを入れた状態のtrueになっている事を確認しておきます。
https://scrapbox.io/files/65b62b8753b5b00025447cd1.jpg
レベルブループリントにノードを新規作成していきます。右クリックして、日本語エディタなら「F キー」英語エディタなら「f key」と入力してFと書かれたノードを選択します。
https://scrapbox.io/files/65b62d06aa3bdd0026ca5a41.gif
作成されました↓
https://scrapbox.io/files/65b62d48a885330025a7aafe.jpg
「F」ノードが見つからない場合は?
検索せずに手動で探してみましょう。インプット > キーボードイベントの項目にFノードがあります。
https://scrapbox.io/files/65b62d907867d10024885ffd.gif
キー入力ノードについて解説します
この「F」ノードなどのキー入力ノードについて解説します。キー入力ノードはキーボードの入力によって処理が実行されるノードです。例えばこの「F」ノードの場合はFキーを押すとそのタイミングでこのノードに接続されたノードが実行されます。例えば以下のようなノードを作成します。
https://scrapbox.io/files/65b62e90fd89f00025511cac.jpg
Fノードからbranchと検索して、Branch(ブランチ)ノードを作成します。
https://scrapbox.io/files/65b62f5cb340650025c2820d.gif
ブランチノードとは?
https://scrapbox.io/files/65b62f8cd84a7d0024c2aee4.jpg
ブランチノードとは処理を分岐させるノードです。条件によってtrue側に接続されたノードを実行するか、False側に接続されたノードを実行するか処理を分岐させるためのノードです。
😺ブランチノードについては最後にまた解説するのでこのまま作っていきましょう。
IsDead変数をGetで追加してブランチのConditionピンに繋げます。
https://scrapbox.io/files/65b62feabc814900245be09a.jpg
ブランチノードのTrue側とFalse側両方にPrintStringノードを作成します。True側のPrintstringには「True側の処理が実行された」と入力し、False側には「False側の処理が実行された」と入力します。
https://scrapbox.io/files/65b630317c74b6002570c66a.jpg
ここまでレベルブループリントに作成したノードです↓コンパイルします。なお確認ですが、IsDead変数のデフォルト値はチェックの入った状態,つまりtrueになっています。
https://scrapbox.io/files/65b6314150d96e0025d0b434.jpg
プレイしてFキーを押します。すると、最初にtrueと表示されます。その後にFキーを入力すると「True側の処理が実行された」とテキスト表示されます。
https://scrapbox.io/files/65b630ca67edcf0025a68db8.gif
https://scrapbox.io/files/65b632827525440026d9a33f.jpg
逆にIsDeadの中身のデータがFalseだった場合はFalse側のノードが実行されるという事になります。
😺このようにブランチノードを使用すると処理を分岐させる事ができます。では今度はtrueからfalseに切り替えて確認してみましょう。
🌟Step2:Boolean型の変数を作成してみよう
では最後に少しゲームっぽくBoolean型を切り替える事にチャレンジしていきます。
レベルブループリントに戻って、既存のブランチノードから繋がるPrintStringのテキスト内容を変更します。True側には「プレイヤーは死んでいる。復活の呪文を唱えた!」と入力して、False側には「プレイヤーは生きている」と入力します。
https://scrapbox.io/files/65b644c177dafe002663a873.jpg
True側のPrintStringノードから「Set IsDead」と検索してIsDeadのセットノードを作成します。
https://scrapbox.io/files/65b644f39ba2180025ea0fce.gif
変数の追加はドラッグでもノード一覧からでもオッケーです
変数ノードは上のやり方のようにノード一覧から追加してもらっても構いませんし、下のようにドラッグで追加してもらっても構いません。
セットノードにはチェックが入っていない状態、つまりFalseになっている事を確認します。
https://scrapbox.io/files/65b64550254e2c00250788d8.jpg
このセットノードによってIsDeadのデータ内容をFalseにする事ができます。
これでノードは完成です。
https://scrapbox.io/files/65b64601338c4b002386e3f0.jpg
一回目はIsDeadはtrueなので「プレイヤーは死んでいる。復活の呪文を唱えた!」と表示、二回目以降は「プレイヤーは生きている」とテキスト表示される。
https://scrapbox.io/files/65b64674bc814900245cad2c.jpg
😺こんな感じにBoolean型ではTrueとFalseを切り替えて使用していきます。またブランチノードもかなり重要なノードになってくるので処理を分岐させるノードと覚えておきましょう。
🌟Step3:《ライトのオンオフを切り替える機能を作ろう》
https://scrapbox.io/files/65b654f2d239ce0025eb0004.jpg
今回実装する機能
Fキーを押してライトのオンオフを切り替える機能を作っていきます。
①ライトのブループリントクラスを作成して設置する
ではまずはライト自体から作成していきます。こんな感じのライトを作成していきます↓
https://scrapbox.io/files/65b8efea255a19002436d66b.gif
Blueprintsフォルダを作成して、右クリック > ブループリントクラス > Actorを選択して名前を「BP_CeilingLight」とします。Ceilingとは天井という意味です。
https://scrapbox.io/files/65b8f00b67ee6f0025a3ed2f.jpg
BP_CeilingLightをレベルに配置します。位置は一旦、プレイヤーの頭上あたりの高さに配置します。
https://scrapbox.io/files/65b8f068a748a6002420c764.jpg
そしたらレベル上のBP_CeilingLightを選択した状態で詳細の追加 > StaticMeshを追加します。
StaticMeshコンポーネントを選択した状態でSM_Lamp_Ceilingを選択します。
https://scrapbox.io/files/65b8f0408783fe0023687de9.jpg
次にライトコンポーネントを追加します。追加から「Spot Light」と検索してSpotLightコンポーネントを追加します。
https://scrapbox.io/files/65b8f0956104dd00238ee876.jpg
最終的にSpoltLightコンポーネントの位置が0,0,-120になって、回転が0,-90,0になりました。
https://scrapbox.io/files/65b8f0aef144840025eeff45.jpg
床のステージとなるアクタをAlt+ドラッグで複製して移動させます。その後適当な大きさに変更して、ライトがある中央あたりに移動させましょう。
https://scrapbox.io/files/65b8f0e6206fbd00244a9409.gif
では現時点でBP_CeilingLightのSpoltLightコンポーネントはこんな感じになっています。
https://scrapbox.io/files/65b8f1003588c7002420d5e2.jpg
影がおかしいので、まずはSpotLightコンポーネントを選択した状態でCastShadowのチェックを外します。その後光の強さとなるIntencityを37000ぐらいまで強くします。
https://scrapbox.io/files/65b8f11751b52e002532348c.jpg
BP_CeilingLightを選択した状態で詳細のブループリントのアイコンのボタン押す > 「インスタンス変更をブループリントに適用」を選択します。
https://scrapbox.io/files/65b8f136394c5b00257c9424.jpg
これで元アセットとなるブループリントクラス「BP_CeilingLight」をコンテンツブラウザで確認してみましょう。メッシュやライトなどのコンポーネントの変更が適用されています。
②ライトのオンオフ機能を作る
ではFキーを押したらライトのスイッチが切り替わる機能を作っていきます。
作成したBP_CeilingLightを開き、イベントグラフを開きます。
まず「F Key」と検索してFノードを作成します。その後ブランチ(Branch)ノードを作成します。
https://scrapbox.io/files/65b8f19951b52e00253239d0.jpg
次に変数を作成します。変数隣のプラスボタンを押します。名前を「IsLightOn」にしてBoolean型にします。
https://scrapbox.io/files/65b8f1d84e0c73002d31c726.jpg
ライトは点いている状態、つまりオンの状態から始まります。なので一度コンパイルして、IsLightOnのデフォルト値にチェックを入れてtrueにしておきます。
https://scrapbox.io/files/65b8f1f567ee6f0025a3fc7f.jpg
IsLightOnの変数をGetで追加します。
https://scrapbox.io/files/65b8f21be262130024263dba.jpg
ではまずブランチノードのTrue側から実装していきましょう。TrueからSetVisibility(SpotLight)ノードを作成します。
https://scrapbox.io/files/65b8f23e09858c00250bbe16.gif
SetVisibilityノードとは?
https://scrapbox.io/files/65b8f265e6b6870026547200.jpg
このSetVisibilityノードはコンポーネントの可視性を切り替えるノードです。ターゲットピンにはSpotLightコンポーネントが接続されています。これによってBP_CeilingLightのSpotLightコンポーネントの表示非表示を切り替える事ができます。
つまりライトのオンオフをこれで切り替える事ができます。SetVisibilityノードのNewVisibilityにチェックが入っているとコンポーネントが表示され、入っていないとコンポーネントが非表示になります。
次にIsLightOnのSetノードを作成します(Set IsLightOnと検索すれば出てきます)。チェックは無しの状態にしておきます。
https://scrapbox.io/files/65b8f2bde262130024264687.jpg
では今度はFalse側の処理を作成していきます。True側の処理を選択してCtlr+CでコピーしてCtrl+Vでペーストします。False側から接続します。
https://scrapbox.io/files/65b8f2d1e5402900243f19d3.gif
SetVisibilityのNewVisibility(コンポーネントの表示の設定)とIsLightonの項目をチェックを入れます。
https://scrapbox.io/files/65b8f30c15a48b0025a50c6c.jpg
これでFキー入力によって、ライトのオンオフを切り替えるノードが完成しました。
https://scrapbox.io/files/65b8ef586104dd00238ed9d6.jpg
これで一旦プレイしてみましょう。本来ならばこれでライトのオンオフが切り替わるはずですが、実はこの時点でFキーを押しても何も反応しません。
Fキーを押してもライトのオンオフが切り替わらない理由は?
実はブループリントクラス上でFノードなどの操作入力ノードを作ってもデフォルトでは操作を無効にする設定になっています。レベルブループリントなどであればFノードなどの操作入力ノードはそのまま使用できるのですが、ブループリントクラスの場合はEnableInputノードを使用して入力を有効にする必要があります。そのEnableInputノードとやらを作成して再度試してみましょう。
そのままBP_CeilingLightのイベントグラフにイベントBeginPlayを追加します。
https://scrapbox.io/files/65b9018b51b52e002532fea0.jpg
BeginPlayからEnableInputとGetPlayerControllerノードを作成します。
https://scrapbox.io/files/65b901a1e5402900243fef35.jpg
EnableInputとGetPlayerControllerとは?
EnableInputは今回作ったFノードなどの操作入力を有効にするノードです。GetPlayerControllerノードでPlayerControllerを取得します。PlayerControllerとは簡単に言うとプレイヤーの操作関係の情報を扱うブループリントクラスになります。つまりプレイヤーの操作の情報が入ったブループリントクラスを取得して、その中にある入力操作の設定を有効にしたという事になります。PlayerControllerについてはブループリントクラスの章で詳しく解説しています。
作成したノードの全体図の確認用
完成!プレイしてみよう!
プレイしてFキーを押してみましょう。ライトのオンとオフが切り替わるようになりました。
🌟実践演習
ライトのカラーチェンジ
目標:Gキーを押すたびに、Step3で作成したライトの色が、赤→青→黄→緑と切り替わるシステムを作りましょう。
Hint①ColorというInteger型の変数を作成し、数字に応じて色を変更するようにしましょう。
Hint②変数Colorはそれぞれの色に対応しています。もしも、変数が対応する色の数を超えたら、0にリセットするロジックが必要です。数を超えたらという処理は、『>(Greater)』ノードを使いましょう。
Hint③変数Colorは実行のたびに1ずつ増やす必要があるでしょう。こういった1ずつ増やしてセットするときは、+(Add)よりも、GetとSetを同時に行える++(Increment Int)を使用するといいでしょう。
https://scrapbox.io/files/65b90867766e70002e7089a1.jpg
Hint③今回はUnityでいうところのIf文よりもSwitth文のほうが使いやすいです。なので、Branchではなく『Switch On Int』というノードを使用しましょう。
https://scrapbox.io/files/65b9089dc4e5df0023534b20.jpg
Hint⑤ライトの色を変える際は『Set Light Color』ノードを使用してください