シグナルとパルス

操作メモ

 ガジェット同士をワイヤーでつなぐとシグナルやパルスが流れます。シグナルやパルスは数値の信号です。 この信号を使ってゲーム動作を組み立てます。

シグナル

 シグナルには2種類あると考えましょう。

  • ON/OFFシグナル
    例)カウンターの完了、スイッチガジェット
  • 強弱シグナル
    例)数値スライダー、シグナル発生器

 ON/OFFシグナルではtrue/falseの値(真か偽か)がやりとりされていますが、ワイヤーをつなげる際には数値で考えた方が分かりやすいです。数値だと、「ONが1」「OFFが0」です。
 一方の強弱シグナルはそのまま数値を持っていて、マイナスだったり0だったりプラスだったりします。

 注意すべきケースは、シグナルを「電源」に接続する場合です。電源に強弱シグナルを接続すると、処理結果に反映されるガジェットがあります。その代表はチュートリアルでも出てくる、ライトでしょう。

光の強さはライトの明るさ設定×電源パワーです

 「OFFが0」「ONが1」という前提に従い、こういった電源は「シグナルの強さ1で、電力供給100%」という扱いになっています(0.1なら10%)。シグナルの強さが2、3と上がればさらに強くなります。

 ライトならイメージしやすいですが、カウンターなどの数値を扱うガジェットも電力の影響を受けるので注意が必要です。

カウンターの電源が50%の例。目標値も結果も半分になっています。

 図のような電源不足のカウンターは、完了のONシグナルも電源の値になってしまいます。1を送れないので、ONシグナルとも呼べなくなっていますね。逆に電源過多の場合はどうなるかというと、送るのはあくまでONシグナルですので、完了で送られる数値は1のまま、大きくはなりません。混乱しますね。

 ガジェットの電源制御には、少しだけ注意が必要だと覚えておきましょう。

 なお「1で100%」という考え方は、電源以外のプロパティ項目にも適用されています。たとえばオブジェクトやペイントのグロウ(発光)です。「20%くらいがちょうどいいかしら、うふふ」なんてノリでうっかり数値スライダー20をつなぐとえらいことになります。いわゆるムスカ状態です。

オウ! イッツア バルス!
2000%の閃光の図

 もし作っているゲームが思い通りに動かず、ロジックの流れにも問題がなさそうなら、強弱シグナルでの電源制御が上手くいっているか、またON/OFFシグナルを大きな数値のように扱っていないか注意してみましょう。

パルス

 バルスじゃないです。Pulseです。

 イメージとしては「瞬間、一回だけ、1が流れる 」 感じです。「すごく短い」のではなく「一回きり」です。ONシグナルを0.1秒流すのとは全然ちがいます。パルスはパルスです。

 処理回数を正確に検出したいとか、「今だ!」とタイミングを制御したい時には、パルスを使います。

 タイマーガジェットで、手直しメニューを開かずにつなげる完了シグナルが、パルスです。タイマー終了(パルス)と明記してあります。

 本ブログの過去記事ではシグナル(1回)などと書いていました。 分かりやすかろうと思ってのことでしたが裏目だったかもしれません。これからはパルスに統一したいと思います。

記事「タイマー」より転載。「パルス」「シグナル」が用意されている

パルスを発生させる

 作業を進めていると、「このシグナルが流れ始めるタイミングでパルスを飛ばしたいけど、どうすれば?」とつまずくかもしれません。シグナルをパルスに変換するようなケースです。そのものずばりのガジェットがあります。シグナル操作マシンです。

シグナル操作マシン

タイマーのとなりにいます

 受け取ったシグナルを調整して受け渡すガジェットです。

 調整モードがいくつか用意されていて、その一つとして「パルスをオン」というモードがあります。シグナルを受け取ったらパルスをシュパッと飛ばすモードです。

デフォルトのモード(左端)は、シグナルの最初と最後をスムーズ化するモード

 ちなみに「パルスをオン」モードで秒数の値を変更すると、パルスのスタート/エンドに時間をかけさせることもできます。数値としては、0から1へ、そして1から0へ指定の時間で増減します。面白い使い方がありそうですが、とりあえず「パルスを飛ばしたい」目的であれば、秒数は0のままでOKです。

「今です!」という合図

 基本としては、「パルスは、一回だけ1を送るもの」という考えでいいと思います。

 なお、パルスをシグナルの代わりに使うこともできます。たとえばパルスをガジェットの電源につなげば、一瞬、電源がONになってくれます。シグナルとパルス、実際に作業する分には身構えなくてもいい、小さな違いなのかもしれませんね。

 結果が変わらないとしても、シグナルとパルスを意識して使うようにしていれば、ワイヤーをつなぐ際に自信が持てるようになると思います。

 最後に一口メモですが、パルスをONシグナルに変換するならカウンター(目標値 1)です。

シグナルを止めたくなったらカウンターをリセット

太いワイヤー

 シグナルを複数持つワイヤーは太く表示されます。

 たとえばコントローラーセンサーのスティックは太いワイヤーになっていて、「上下の入力を示す値」と「左右の入力を示す値」の2つの情報を持っています。チュートリアルでは、「スプリッター」ガジェットを通して必要な情報を取り出す方法を学べます。

ほしいシグナルをスプリッターで抽出

0という値

 冒頭、ON/OFFシグナルの話題の時点では触れませんでしたが、OFFシグナルが「流れているか ?」と問われると微妙ですね。目に見えませんので。

 実際には信号は流れていないでしょう。カウンターが未完了の時や、そのガジェットの電源がオフになっている場合などに0が流れていたら不自然です。ただいずれにしろ、いざ判定しようと思えばその数値は0なのです。

 信号がない時にはOFFシグナルが流れていると見なした方が、ワイヤーをつなぐ時にイメージしやすいです。

0が流れていると見なした方が、NOTゲートの先が有効になる流れをイメージしやすい(気がする)
画像は記事「ONとOFFを切り替える」より転載

 この「シグナルがないなら0」という考え方について注意したいのは、前段の太いワイヤーのケースです。太いワイヤーをそのまま判定に使うと思わぬ失敗をするかもしれません。

太いワイヤーそのものの値は?

 例として、左スティックのワイヤーをダイレクトにナンバー表示マシンにつないでみます。少しでもスティックを倒せば-1~1までの入力値が検出されて、「未入力なら0」だということが分かります。

 次にこの太いワイヤーをカルキュレーターにつないで「= 0」かどうかを判定してみます。カルキュレーターの結果アウトプットをオブジェクトの「表示OK」に接続すれば、「スティックを倒している間、オブジェクトが見えなくなる仕掛け」となるはずです。

 ところが実際にテストしてみると、スティックを倒しているのにオブェクトが消えてくれないケースが出てきます。

  一体なぜでしょうか? スプリッターを通して数値を確認してみると、カルキュレーターが上下信号と左右信号をORで判定しているらしいことが分かります。

 正確に横方向に入力した場合、上下の信号は0なので、「= 0」が成立する、という扱いです。

ななめ入力だとこう
正確に横だけ入力するとこう

 入力しているのに、結果は未入力……こんなことはテストしてみないと分かりませんね。

 コントローラーセンサーではこうでしたが、他の太いワイヤーではどうなるでしょう。シグナルを3つ、4つ持っている場合は……? いちいちテストしていられませんね。

 ということで、太いワイヤーを直接数値判定するのは危険だとだけ覚えておきましょう。特に「0」を判定したい時は、スプリッターを通して、どのシグナル(ワイヤー)をチェックするのか、厳密に行うのがおすすめです。

Dreams Universe(アーリーアクセス版) の記事です。製品版には適用できない可能性があるのでご注意ください。

Dreams Universe 一覧に戻る

Dreams Universe
制限ゲート

 今回の記事は、制限ゲートについてゼロから説明するような口ぶりで書かれている部分もありますが、実際は …

Dreams Universe
Door Helper

 ギミック/ロジックシステム。「Single」「double」「Slide」の3パターン。 概要   …

Dreams Universe
ペイントが置き去りになる時の対処法

 ペイントやペイントアニメーションで作ったエフェクトについて、オブジェクトとグループ化して、ゲーム中 …