見出し画像

Resoniteでモノの状態に應じてBool値のオン・オフを操作する方法【ValueEqualityDriver・BooleanSwitcher】

どうも、萬朶櫻です。

Resoniteでは、インスペクターから「Active」をオン・オフすることで、物の表示・非表示が切り替へられます。

しかし、いちいちインスペクターを開いて云々といふのは面倒だし、特定の條件でうけんで自動で切り替へるといった操作に對應たいおうするのが難しいでせう。

  • 物Aを動かしたら物Bが消える/出現する

  • 複數の物の表示・非表示を簡單に切り替へる

これらの動きを行へるやうにするコンポーネントを見つけたので、今囘はそれを紹介します。

bool型は眞僞型といって、「オン・オフ」「はい・いいえ」「有效・無效」など、2つの状態を扱ふためのやつです。bool型の値は一般に「眞(True)・僞(False)」と呼ばれます。

【關聯記事はこちら】


各コンポーネントの場所

いづれもこの階層にある。

ValueEqualityDriverは、どのやうな數値すうちを參照するかによって扱ふ型が異なるので、隨時適切な型を選ぶ必要がある。

特定の値でオン・オフ(ValueEqualityDriver<T>)

ValueEqualityDriverは、何らかの値が特定の數値と一致したら、どこかのBool値をオン・オフする。といふ處理を行ふコンポーネントである。


このやうな2つの物體オブジェクト實檢じつけんをする。次のやうな動きを實現じつげんしたい。

  1. Sphere原點ぐゑんてん(x:0 y:0 z:0)にあるときは、Boxは存在する

  2. 球がそこから少しでも動いたら、箱は消える

まづ、今囘は「位置」に基づくので、型は「float3」を用ゐる。コンポーネントを充てる場所は「Test」でよい。

この長大なリストのどこかに「<float3>」があるので探す

次に以下の操作をする。

  1. ValueEqualityDriverの「TargetValue」欄にSpherePositionを充てる

  2. ValueEqualityDriverの「Target」欄にBoxActiveを充てる

  3. ValueEqualityDriverの「Reference」に好きな値を記入する

    • (今囘は原點ぐゑんてんなので全て0でよい)

「Position」「Active」それぞれの文字の所を掴んで(右クリックして)、ValueEqualityDriverの所定の欄の所で離す

すると、先程まで存在してゐた箱が消えてゐる(球を動かすと箱は再び出現する)

これは適用されるTargetのオン・オフが想定と逆になってゐるためである。

「Invert」のチェックを切り替へるとよい。

これで球が動くと箱が消えるといふ、當初たうしよの想定通りの動きが出來た。

今囘はTargetに「Active」を充てたが、Bool値ならば何でもよい。スロットの「Persistent」でも、他のコンポーネントの「Active」でも可。

複數の物をリスト管理してオン・オフ(BooleanSwitcher)

BooleanSwitcherは、數字すうじ整數int)におうじて複數のbool値をオン・オフするものである。


この5つの物たちの表示・非表示(Activeのオン・オフ)を制禦する。

5つの物をまとめるための親スロット(ここでは「Test」)を作成し、Testスロットに「BooleanSwitcher」を充てる。

初期状態では「何をオン・オフするのか」が定義されてゐないので何も起こらない。

今囘はオン・オフしたい物が全て子になってゐるので、コンポーネント内の「AutoAddChildren」をチェックするか、もしくは「Setup For Children Objects」をクリックする。

すると、5つ全ての物が自動でリストに追加される。

オン・オフ制禦したい物が子スロット以外の場所にある場合は、「Target(list):」下の「Add」をクリックして入力欄を出現させ、制禦したい値のタイトルを掴んで持ってくる必要がある。

さて、子を追加した初期状態では、リストの一番上(0番目)にあるBoxのみが表示されてゐる。

これは、「ActivationMode」が「AtIndexOnly」(「ActiveIndex」に入力されてゐる數字と一致する番號ばんがうのみ有效化)になってゐて、「ActiveIndex」が0になってゐるため、リストの0番目にあるBoxのみが有效化されてゐるからである。

試しに「ActiveIndex」を2にすると、2番目のCapsuleが表示される。

また、「ActiveIndex」を0に戻して「ActivationMode」を「AllButIndex」(「ActiveIndex」に入力されてゐる數字と一致しない番號のみ有效化)にしてみると、0番目のBox以外が表示される。

このやうに、BooleanSwitcherを使へば、いちいち個別にActiveをオン・オフしにいかなくても、數字で表示非表示を切り替へることができる。

今囘はTargetに「Active」を充てたが、Bool値ならば何でもよい。スロットの「Persistent」でも、他のコンポーネントの「Active」でも可。

「ActiveIndex」の數字をいちいちインスペクターで操作するのもまた面倒だが、これには別のコンポーネントと組み合はせたり、適當てきたうなボタンUIを付けてFluxで適切にDriveしたりするなど、やや高度な操作が求められる。

各コンポーネントの詳細

ValueEqualityDriver<T>

  • Persistent: このコンポーネントを充てられてゐる物をインベントリなどに保存する時に、このコンポーネントも一緒に保存するかどうか

  • UpdateOrder: このコンポーネントの更新順序

  • Enabled: このコンポーネントを有效・無效


  • TargetValue: どこの項目を參照するか

  • Reference: ここで決めた數値すうちに基づいて「Target」のオン・オフを切り替へる。ここの形式は、データ型の種類によって異なる

  • Target: オン・オフを切り替へる對象たいしやう

  • Invert: 日本語で「反轉はんてん」。オン・オフの結果が入れ替はる

  • UseApproximateComparison: 直譯すると「近似比較を使用する」とのことだが、どんな動作をするのかは不明

BooleanSwitcher

  • Persistent: このコンポーネントを充てられてゐる物をインベントリなどに保存する時に、このコンポーネントも一緒に保存するかどうか

  • UpdateOrder: このコンポーネントの更新順序

  • Enabled: このコンポーネントを有效・無效


  • AutoAddChildren: チェックを入れると、子スロットを自動で「Targets(list):」に追加する。また、後から子に物が追加されても隨時自動で追加してくれる

  • Targets(list): 操作する對象たいしやうの數値(Bool値)。[Add]で追加。

  • ActiveIndex: 表示・非表示を操作するための數値

  • ActivationMode: 「ActiveIndex」に入力された數字に應じてどのやうな擧動きよどうをするか

    • AtIndexOnly: その數字と一致する番號のみ有效化 

    • AllButIndex: その數字と一致しない番號のみ有效化

    • IndexAndBefore: その數字と一致する番號と、その1つ番號ばんがうを有效化

    • IndexAndAfter: その數字と一致する番號と、その1つ番號ばんがうを有效化

  • [Setup For Children Objects]: 子にあるスロットを自動で「Targets(list): 」に追加する。「AutoAddChildren」の手動で行ふものと思はれる


この記事が気に入ったらサポートをしてみませんか?