電線切断による電源の遮断
最終更新:
30pin
-
view
'08/10/24
┼ 電線切断による電源の遮断
概要
- Rope を電線に見立て、切断による電源の遮断を実現させる。
ノウハウ資料
◇ 始めに
通常、電線を切断すると、以降への電力供給が断たれます。「通電」という物理が存在しない CRYENGINE2.0 の世界でこれを実現するには、「通電」の役割を果たす代わりのものが必要となります。
キーとなるテクニックは ”どこの電線が切れたか・どこまで電力が有効か” という情報を保持しておく領域を GameToken に確保し、それをシステム全体の電気機器が参照して、自身への通電の有無を確認させる事にあります。
GameToken を ”一時メモリ的に活用する”という考え方です。
GameToken に蓄えられた情報は、GameToken ノードによってどのフローグラフファイルからでも参照できる為、フローグラフをスマートに組めるという恩恵も有ります。
今回は、電線をストレートに接続する場合と、ブランチ(枝分かれ)に接続した場合に分けて、デモを作成して解説します。
応用編という事で、キーとなるテクニック以外にも、いくつか為になると思われる技法を組み合わせています。参考にして頂ければ幸いです。
◇ ストレート接続の場合
─ 概略 ─
デモの概略をスライドショー形式で解説致します。
画像下の解説は、画像の右上の番号に対応していますので、併せて御覧下さい。
画像はクリックすると次へ進みます。
(1~7の後、4~7と繰り返して終わりです)
画像下の解説は、画像の右上の番号に対応していますので、併せて御覧下さい。
画像はクリックすると次へ進みます。
(1~7の後、4~7と繰り返して終わりです)
※画像クリックで次に進みます
- 照明・電線それぞれの配置図
- 電線には、発電所から離れるに従って減少する番号が振られている
- 照明には、直前の電線より1低い番号が振られている
- 電線が壊れた時、
- 壊れた電線が持っている番号が GameToken に送られる
- GameToken の番号が変化すると、GameToken ノードから変化した番号が出力される。
- その番号が、照明の持っている番号より大きければ「照明の Off 」「以後一切の操作を受け付けない」操作をする。
─ フローグラフの解説 ─
(画像クリックで別窓で拡大表示します)
(画像クリックで別窓で拡大表示します)
◆ 電線の状態を GameToken へ出力するフローグラフ (概略の 2,5 の役割)
「ケーブル値のセット」と一くくりにしている中の 500 という数値が、電線に振られた番号になります。この番号が低くなる程(この図では下に行く程)末端の電線である事になります。 (概略の 2 )
電線が壊れた時、SetNumber の番号が途中のフローグラフを経由して右端の GameToken へ送られます。 (概略の 5 )
フローグラフの中間に、以前送られた番号より低い番号は無視するフローグラフが組まれています。これは、以前より低い番号(末端の電線)が送られると、根元の電線が切断さたままなのに、機能が回復してしまう現象を防ぐ為です。
動作原理は次の通りです。以前に Any から出力された番号が Less の B に入っていますので、新たに入ってきた A が B 以上の場合に out から 0 (False) が出力され、Block が解除されて GameToken に出力されます。これによって、以前より小さな番号(より末端の電線の破壊)は無視される事になります。
GameToken の初期化処理は、GameToken 自体の初期化と共に、上記の選別するフローグラフの Less ノードの B 入力ポートを、番号 0 にします。
左下側にある ParticleEffect は、電線が壊れた時に出るスパークのパーティクルです。
◆ 室内灯の操作をするフローグラフ (概略の 3,6,7 の役割)
左一番下フローグラフの、Less ノードの 199 という数値が 「室内灯が持っている番号」になります。 (概略の 3 )
それより大きな番号が GameToken ノードから入った時に Less ノードの true が出力され、照明 ON のブロッキング(阻止)と照明の消灯が行われます。 (概略の 6,7 )
フローグラフの右側 「Light オブジェクトの ON/OFF 」 「室内灯の輝度調節」 セットで一つの照明の機能となります。
中間部でごちゃごちゃしていますが、左側一番上の Switch ノードだけが右端の照明を ON にできる関係を持っており、その他は初期化や OFF にしようとするノードです。普段、身の回りのライフラインが成立している事が、いかに素晴らしい事かが実感できます。
◆ 街灯の操作をするフローグラフ (概略の 3,6,7 の役割)
基本は「室内灯…」と同じで、「スイッチ」が「時間による ON/OFF 」に変わった事、照明自体の破壊が無くなった事、初期化が無くなった事です。
初期化のフローグラフが無くなりましたが、Less の out が、Switch to Game (Ctrl+G) でも Enable Physics (Ctrl+P) でも 0 (False) に初期化されますので、この構成で問題ありません。他のノードが色々くっついている「室内灯…」の場合は初期化しないと、スイッチが利かない等不安定になる可能性があります。
左側の大半が時間によって照明を ON/OFF するためのフローグラフです。今回の主目的ではないので、詳細な説明は割愛しますが、AND とは、A と B が両方とも 1(True) の場合のみ 1(True) を出力するノードです。また、時間の表記は 「60分の何倍か」 という意味で単位は「時間」ですが、単純に 17.67 なら、17 時間と 60 分の 0.67 倍( 40.2 分)で、約 17 時 40 分となります。
─ 結果 ─
電線の切断によって照明が消灯する様子を動画にしました。
オブジェクトの配置は画像の様になっています。
オブジェクトの配置は画像の様になっています。
◇ ブランチ接続の場合
─ 概略 ─
デモの概略をスライドショー形式で解説致します。
画像下の解説は、画像の左下の番号に対応していますので、併せて御覧下さい。
画像はクリックすると次へ進みます。
(1~11の後、5~8と繰り返して終わりです)
画像下の解説は、画像の左下の番号に対応していますので、併せて御覧下さい。
画像はクリックすると次へ進みます。
(1~11の後、5~8と繰り返して終わりです)
※画像クリックで次に進みます
- 照明・電線それぞれの配置図
- ブランチの電線には、直前の電線より1低い番号が振られている
- また、ブランチには、ブランチ専用の番号が振られている
- ブランチの照明には、直前のブランチの電線より1低い番号が振られている
- 本線の電線が壊れた時、
- 壊れた本線の電線が持っている番号が本線の GameToken に送られる。
- 本線の GameToken の番号が変化すると、本線の GameToken ノードから変化した番号が出力される。
- その番号が、照明・ブランチ電線の持っている番号より大きければ「本線照明の Off 」「ブランチ電線の機能停止」「以後一切の操作を受け付けない」操作をする
- 機能停止したブランチ電線が持っているブランチ専用の番号が、ブランチ専用の GameToken に送られる。
- ブランチ専用のGameToken の番号が変化すると、ブランチ専用のGameToken ノードから変化した番号が出力される。
- その番号が、ブランチの照明が持っている番号より大きければ「照明の Off 」「以後一切の操作を受け付けない」操作をする。
─ フローグラフの解説 ─
(画像クリックで別窓で拡大表示します)
(画像クリックで別窓で拡大表示します)
◆ 本線の電線の状態を GameToken へ出力するフローグラフ (概略の 6 の役割)
ストレート接続と全く同じです。
◆ ブランチの電線の状態を GameToken へ出力するフローグラフ (概略の 2,3,8,9 の役割)
このブランチ電線は、本線の電線 C の直後に接続されている設定です。
ブランチ接続されたシステムは、最初の電線にのみ特別に、照明器具と同じ用途の番号が振られています。それが、電線 E 中の Less ノードの 299 になります。 (概略の 2 )
もちろん、電線としての番号も振られていますが、これはブランチ接続専用のものとなり、これ以降の接続は、照明も含めてブランチ接続専用の番号・GameToken が使用されます。 (概略の 3 )
電線 E のくくりに有る GameToken は本線の GameToken で、本線の電線が壊れると、常にここから本線の電線の番号が出力されます。ブランチ元よりも根元側の本線が壊れた時、ブランチ専用の GameToken へブランチシステム最大の番号(ここでは 900)が送られ、以降のシステム全体が停止する事になります。 (概略の 8,9 と、10,11 も含む )
電線 E 自体が壊れた場合は、図中の 「電線 E 切断時用」 と書かれた部分のフローグラフが使用され、通常、電線が壊れた時と同じ振る舞いをします。
◆ 本線の街灯の操作をするフローグラフ (概略の 7,8 の役割)
ここの要の部分は、ストレート接続の時のフローグラフと変わりません。
ただし、Light_Switch という名前の GameToken が新たに作成され、「時間による ON/OFF 」 の部分のフローグラフがほぼ GameToken ノードに置き換わっています。
今回ブランチ接続用に作成したデモは、街灯を多数設置し、それら全てが時間によって ON/OFF の制御を受けます。この 「時間による ON/OFF 」 を制御するフローグラフは、幾つもある必要がありませんし、街灯1棟々々へ、一つのフローグラフから出力をつないでいると、管理が大変でミスも増えます。そこで、「 GameToken を使用するとフローグラフがスマートに組める」 という恩恵をここでも受ける事にしました。
本体の説明は、フローグラフの説明の最後に有ります。
◆ ブランチの街灯の操作をするフローグラフ (概略の 4,10,11 の役割)
GameToken がブランチ接続専用のものである以外は、一つ上の「本線の街灯の操作をするフローグラフ」 と変わりありません。
◆ 時間による照明電源の ON/OFF を GameToken へ出力するフローグラフ
時間による照明の電源を ON/OFF する為の GameToken を新たに作成し、独立させたものです。
ここでリセット処理を Any の in2 に接続しているのには一応意味があります。Any ノードは多数の入力を一つにまとめる事が出来る非常に有用なノードです。しかし、同じタイミングで複数の入力が有った場合は、どの入力が優先されるかは表記されていません。このフローグラフを作成した際も、Start → SetNumber → Any(in1) の処理よりも、Timer → SetNumber → Any(in2) の処理の方が早い事に気づきました。
同じタイミングの処理を Any に接続した場合、数字の大きい入力の方が速く処理が行われる傾向がある様子でしたので、今回はこの様な接続にしてみました。他に確実な対策は有ると思いますが、一つのトピックとしてそのまま載せる事にしました。
デモの録画時間を短縮する為、1 秒間隔で時間を読み取る仕様に変更しています。
─ 結果 ─
中心に SMG を設置し、各電線(A,C,E,Dの順番)を射撃して切断する動画を作りました。
消灯する照明の位置をご確認ください。
オブジェクトの配置は画像の様になっています。
消灯する照明の位置をご確認ください。
オブジェクトの配置は画像の様になっています。
─ 最後に ─
ブランチ接続のデモ録画で、三脚に無理矢理取り付けたSMGを使用しました。
面白い試みだと思ったのですが、動画ではほとんど見えなくなってしまったので、その様子の画像と、フローグラフを貼り付けておきます。
面白い試みだと思ったのですが、動画ではほとんど見えなくなってしまったので、その様子の画像と、フローグラフを貼り付けておきます。
三脚に無理矢理取り付けたSMG
デモ録画に使用したフローグラフ
(画像クリックで別窓で拡大表示します)
(画像クリックで別窓で拡大表示します)
デモを録画する際、自分が InGame して電線を切断したり、色々試しましたが、電線と照明と自分の位置関係がつかみ辛かったので、SMG を固定してカメラを俯瞰させる方法に落ち着きました。
Enable Physics (Ctrl+P) でデモを開始した場合、SMG の弾の軌跡が見えなかった為、Switch to Game (Ctrl+G) で InGame し、録画用にセッティングしたカメラにプレイヤーを固定しました。
以上です。
文字ばっかりで解り難かったかもしれません。
文字ばっかりで解り難かったかもしれません。
最後まで御覧頂き、誠にありがとうございました。
┼ ┼