1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民こと、
新藏(にいくら)と申します♪
(/・ω・)/
前回はキャラクタが接触した時にライトをONにするブループリントを作成しました。
しかし、ライトをONにする機能しか実施していなかったので、
お友達から「ライトのON・OFFを切り替えられないのか?」というありがたい指摘を受けました。
色々試してみて実現させることができましたので、
今回はキャラクタが接触した時にライトをON・OFFにする方法
について記事にしたいと思います!
UE5について勉強中の方や、興味がある方の参考になれば幸いです。
(*^^)v
ちなみに、12月はARIのアドベントカレンダもやっていますので、
もしよろしければ、こちらも応援お願いします♪
2.動作イメージ
まず初めに、動作イメージを紹介したいと思います。
後述する手順を実施することで、以下の動画の様に
キャラクタが接触した時にライトのON・OFFが切り替わります。
また、こちらも実装方法は後述しますが、
ライトをOFFにする代わりにライトの色を変えることもできます。
3.ブループリントの修正
では早速、ブループリントを修正していきましょう♪
3.1.前回の記事で作成したブループリントを修正します。
3.2.画面左の変数にて、「+」を選択します。
3.3.画面右の詳細にて、変数名を「Light_Is_Green」とし、型を「Boolean」とします。
3.4.「Do Once」ブロックの三角マークを選択し、「ブランチ」を選択します。
3.5.「Condition」を選択し、「Get Light Is Green」を選択します。
「Get Light Is Green」は変数「Light_Is_Green」のゲッタとなります。
3.6.「Set Material」ブロックを選択し、「Ctrl + C」を押し、「Ctrl + V」を押し、コピペします。
3.7.「ブランチ」ブロックと「Sphere」ブロックを、コピーした「Set Material」ブロックに接続します。
3.8.Trueに接続されている「Set Material」ブロックにて、以下の設定をします。
■ライトをON・OFFにしたい場合は「なし」を選択します。
■ライトの色を変えたい場合はライトの色を変えるマテリアルを選択します。
ライトの色を変えるマテリアルの作成方法は、以下の記事をご確認ください。
https://qiita.com/Aichi_Lover/items/5d590a6a788f708168fa
3.9.それぞれの「Set Material」ブロックの三角マークを選択し、「Set Light Is Green」を選択します。
「Set Light Is Green」は変数「Light_Is_Green」のセッタとなります。
3.10.「Set Light Is Green」ブロックを選択し、True側はチェックなし、False側はチェックありとします。
3.11.「Set Light Is Green」ブロックの三角マークを選択し、「Delay」を選択します。
3.12.Durationの値(処理を停止する秒数)を設定します。
瞬間的にブループリントが複数回実行されるのを防ぐための設定となります。
3.13.「Delay」ブロックと「Do Once」ブロックの「Reset」を接続します。
3.14.画面上部にてコンパイルを選択し、保存を選択します。
3.15.以上で設定は完了です。
手順3.8で設定した内容に応じて、2章の動作イメージ の様に、
キャラクタが接触するとメッシュのON・OFFが切り替わる、もしくはメッシュの色が変わります。
4.補足:ブループリントの処理内容について
補足として、ブループリントでどのような処理をしているのかを記載します。
今回作成したブループリントの全体像は以下となります。
ここは前回と同じですが、「On Component Hit」ブロックと「Cast To ...」ブロックにて、
球とキャラクタが接触した時というトリガーを定義しています。
瞬間的に複数回ブループリントが走るのを防ぐため、「Do Once」ブロックで一度だけ処理をするようにしています。
■1回目にキャラクタが接触した時の処理
変数「Light_Is_Green」の値がFalseのため、
False側の「Set Material」ブロックにより、メッシュの色が緑色に変更されます。
その後、「Set Light Is Green」ブロックにより変数「Light_Is_Green」の値がTrueとなり、
「Delay」ブロックにより数秒間処理が停止されます。
最後に、「Do Once」ブロックに接続し、次にキャラクタが接触した時にブループリントが動くようになります。
■2回目にキャラクタが接触した時の処理
変数「Light_Is_Green」の値がTrueのため、
True側の「Set Material」ブロックにより、メッシュの色がなくなる、もしくは別の色に変更されます。
その後、「Set Light Is Green」ブロックにより変数「Light_Is_Green」の値がFalseとなり、
「Delay」ブロックにより数秒間処理が停止されます。
最後に、「Do Once」ブロックに接続し、次にキャラクタが接触した時にブループリントが動くようになります。
3回目以降は同様にして、1回目、2回目と同じ処理が交互に繰り返されます。
5.おわりに
ここまで読んで下さり、ありがとうございます!!!
(^^)
今回はお友達からのありがたい助言でブループリントを修正してみました。
何回も動くメッシュが作れて楽しかったです♪
記事を書いている段階で、「数秒間処理を停止して終了」というブロックがあれば
「Delay」ブロックと「Do Once」ブロックを使うよりエレガントにフローが組める気がしてきたので、
実際にあるかどうか調べてみます!
次回も気の向くままに記事を書いていくので、よろしくお願いします♪
(:3_ヽ)_