マリオネット解説講座

第4回「レイヤ追従型柱状体」

ArchitectLandmarkSpotlightDesigner

4-4. ムシ退治

4-3までで、レイヤに追従する柱状体がほぼできあがりました。
ただ、このままオブジェクトにしてしまうと、エラーが発生してしまいます。いわゆる「バグ」というものです。

上下のレイヤ指定のためのポップアップで、あらかじめデフォルトレイヤを指定しておくことはできますが、ファイルによってレイヤ名が変わることがあります。

その際、レイヤ名が空欄になることから、レイヤの高さを取得できずにエラーを出してしまいます。

4-4-1. レイヤ選択が正しいかを判定

上下のレイヤ選択ポップアップが空欄でないことを判定します。

  • 使用するノード
    • 入力関数初級Any 2つ
    • 数学関数基本計算not equal 2つ

not equalノードの入力「n1」に3上端のレイヤノードの出力「hLayer」を、not equalノードの入力「n2」にAnyノードの出力「item」を接続します。

not equalノードは、2つの入力ポートが異なるものであれば「True」を、同じものであれば「False」を出力するノードです。

Anyノードを選択し、オブジェクト情報パレットのevalに「0」と入力します。3上端のレイヤで何も選択されていないときは「0」が出力されるので、きちんとレイヤが選択されているときはnot equalが「True」を、選択されていないときはnot equalが「False」を出力するようになります。

5下端のレイヤノードの方も同じように接続しましょう。

4-4-2. もしも♫レイヤが♫カラ〜な〜らば〜

ということで、2つの条件に合わせてレイヤの高さを取得します。

  • 「もし」Anyが「True」ならば、選択されたレイヤの高さを…
  • 「もし」Anyが「False」ならば、オブジェクトがあるレイヤの高さを…

これを実現するのがIfノードです。

  • 使用するノード
    • データフローIf 2つ

まず、3上端のレイヤノードとGet Layer Elevationノードを切り離します。そこにIfノードを配置し、3上端のレイヤノードの出力「hLayer」をIfノードの入力「itemTrue」に接続します。Ifノードの出力「item」はGet Layer Elevationノードの入力「hLayer」につなぎます。

Ifノードの入力「itemFalse」には、Parent PIOGet Layerノードの出力「hLayer」を接続します。

IfノードがTrueかFalseかを判定するために、入力「bTest」にnot equalノードの出力「b」をつなぎます。

これで、レイヤの選択が間違っていればオブジェクトが配置されたレイヤの高さを、正しければ指定されたレイヤの高さを取得して、柱状体作成に利用します。

5下端のレイヤノードの方も手を加えてみましょう。
できあがりは下図のようになります。

ネットワーク全体は下図のようになります。

このように比較的簡単なプログラムでもエラーの回避が必須になります。プログラムが大きくなるにつれて、エラー箇所の発見や修正が大きな作業になります。

これで今回のマリオネットの組み立ては以上となりますが、このままだと動かないので、次のセクションでオブジェクトノードに変換します。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください