Valueの選択肢はたくさんあるくせにReferenceは一切なにも出てこなくてノーヒントで立ち向かわざるをえない問題を解決するためにこの記事を書きます。
Valueは大量の例が出てくる。全ての数値型が出てくるわけではなく、UriやRefID、Enumなどはここに表示されない。しかし一方Referenceは…… |
何も出てこない。結構不親切。 |
Referenceの名前を入力すると解決
- Valueと同様、Referenceもその型の名前を入力すると出てきます。ここでは、大文字と小文字を間違えてはいけない。
- Slot
- User
- Material (マテリアルコンポーネントが入る)
- AudioOutput (AudioOutputコンポーネントが入る)
- IAudioSource (音声ファイルとか、ユーザーの声とかが入る)
- StaticTexture2D (テクスチャ、要は画像)
- 等
Userを入力した例。「user」だと何も出てこない。 |
- 恐らく、DynamicVariableを使ったりするほとんどの場面においてSlotとUser以外のReferenceを使うことはないので(AssetFrameでIAudioSourceやStaticTexture2Dを使うかも)、とりあえず↑の例さえ覚えておけば大体大丈夫です。
複合型Referenceの入力方法
-
複合型は、UserやSlotとは異なる、型指定の中でさらに型を指定しなければならないタイプのやつです。
-
一つ例を挙げると、「Sync`1[[BaseX.float3, BaseX]]」といったものが複合型の入力です。
- これは、Float3のValueFieldそのものを格納できる型です。
- 厳密には、Reference(RefID)です。
- この他にもIAssetProvider`1[FrooxEngine.Material]などもあります。
- これは、Float3のValueFieldそのものを格納できる型です。
-
Syncなんちゃらの呪文をかみ砕いて説明すると、Sync`1が「1つのValueField」という意味で、後ろの[[BaseX.float3,BaseX]]で「float3だよ」、ということを指定しています。[[BaseX.color,BaseX]]とかにすればcolorにもなります。
- 「Sync`1が1つのValueFieldで」という文言の意味するところは、例えばCastClass(LogiXの色を変えるやつ)なんかだと、変換元と変換先の2つの型を指定する必要があるので、CastClass`2[[いろいろ]]みたいに入力します。
ValueFieldを格納できます |
使用例
- せっかくなので、例として挙げたSync型の詳しいつかいかたも説明しておきます
- Sync型は、DynamicVariableと組み合わせると便利です。
- 複製したSlotを逐一Tweenでいろんな向きに動かす、みたいな使いかたができます。
Tweenノードの白いのが左になるmodを入れています(本来なら右側から出る)。 |
- ReadDynamicSync<float3>ノードは少し出し方が面倒です。(DVNodeGeneratorというユーザーメイドのこれをやりやすくするたためのツールがありますが、正規の方法を説明します。)
- ノードブラウザからは出現させられないので、インスペクターから直接LogiXノードのコンポーネントを空のスロットに適用する必要があります。
- 下の画像は、空のスロットに対してLogiX -> Variables -> ReadDynamicVariableから、Sync`1[[BaseX.floatt3,BaseX]]を入力してコンポーネントを適用したもの
- コンポーネントを適用したスロットを掴んでアンパックするとノードが出現します。
情報量が多い |
色はfloat3と変わらないが、型はfloat3ではなくSync<float3>である。 |
- Sync<float3>はfloat3にキャスト(型変換)できないし、float3に限らずあらゆる型でできない。
- そのため、どうしても値をいじりたい場合はToStringとParseを組み合わせる必要がある。
- Parseは、Operators -> Parse内にあります。
- ToStringもParseもLogiXノードの中では結構重たい(遅い)部類なので、Forで回そうとすると重たくなりやすい。
- そもそも、これはいろんな場所にTweenを行えるようにするためのテクニックであるので値をいじりたい場合は素直にDynamicVariableを使うべき。
- Tweenの他にWriteやDriveノードもつなげることができ、Driveの場合は動的にDrive先を変更できるという使いかたがあるが、Writeの場合はWriteDynamicVariableで事足りるので意味は薄い。
- そのため、どうしても値をいじりたい場合はToStringとParseを組み合わせる必要がある。