見出し画像

Resoniteで複數の値を同期させる方法【ValueField・ValueCopy】

どうも、萬朶櫻です。

  • 複數ふうすう物體オブジェクトやコンポーネントに同じ値をてはめる

  • その後、その値を一括で變更へんかうするかもしれない

このやうな場合、いちいち手入力をしてゐると大變たいへん勞力らうりよくになるでせう。

そんな時に便利なコンポーネントがあるので、今囘はそれを紹介してみます。

※Bool値の一括管理については、以下の過去記事が參考になるかもしれません。
※もちろん、この記事で紹介するコンポーネントでもBool値を管理できます。


複數の數値を「ValueField<T>」で一括管理してみる例

ValueFieldの場所は「Data」の中。

このコンポーネントはデータ型を指定するタイプのもので、使ひたい型に應じて選ぶ必要がある。今囘は<float3>を用ゐる

このコンポーネントで定めた値をコンポーネント等の項目に驅動ドライブすることで、複數のコンポーネント項目を一括管理することができる。

物體オブジェクトとコンポーネントの準備

例として次のやうな物を作る。
それぞれの物體オブジェクトを全て同じ向き・同じ速さで移動させたい。

まづは「Box - Parent」「Cone - Parent」「Sphere - Parent」の3物體オブジェクトにそれぞれコンポーネント「Panner3D」を充てた。

Panner3Dの「Target」に各物體オブジェクトのPositionをてはめて、「Speed」のxyz値を設定することで、その物體オブジェクトに等速直線運動をさせることができる。

そのままPanner3Dを充てると、3つの物體オブジェクト全てが同じ座標に重なってしまふので、「Box - Parent」の「_preOffset」のy値には「0.4」を、「Sphere - Parent」の「_preOffset」のy値には「-0.5」を、それぞれ入れてある。

それぞれの物體オブジェクトを全て同じ向き・速さで移動させたいとき、各物體オブジェクトの「Speed」値などをいちいち個別に入力するのは面倒である。

また、後から向きや速さを變更へんかうする時にも多くの手間がかかる。

そこで、このやうに、適當てきたうな所にスロットを作り、「ValueField<float3>」を充てる。

「Value」のXの値を1にしておく。

ValueFieldの値を各Pannerに驅動ドライブする

次に

  1. ValueField<float3>の「Value」を右クリックで摑む

  2. 「Box - Parent」をダブルクリックしてBoxの内容を表示させる

Boxの内容が表示できたら、

「Panner3D」の「_speed」のところにカーソルを合はせ、離す。

するとこのやうなメニューが出るので、上の「Drive」を選ぶ。


すると、このやうに、「ValueField<float3>」で設定した値と同じ値が「Panner3D」の「_speed」に充てられる。

このとき、「ValueCopy<float3>」といふコンポーネントが出てくるが、これは値のドライブをしたときに自動で生えてくるコンポーネントなので、氣にしなくてよい。

これと同じ作業を「Cone - Parent」「Sphere - Parent」にも行ふ。

すると、全ての物體オブジェクトが同じ方向、同じ速度で移動を始める。

「ValueField<float3>」の値を變更へんかうすると、それにおうじて各物體オブジェクトの動きも同時にはる。

これで各物體オブジェクトの動きを一括管理することができた。

數値を驅動ドライブするためのコンポーネント「ValueCopy<T>」について

單體たんたいで充てることもできる

先述の通り、ある値を別の値に驅動ドライブさせると、そのデータ型におうじて「ValueCopy」が自動で生成される。

他のコンポーネントと同樣に「コンポーネントをアタッチ」から充てることもできる。

場所は「Transform」の「Drivers」の中。

この方法で充てると、どの値をどの値に驅動ドライブさせるかが未設定なので、そのあたりを設定する必要がある。

  • Source驅動ドライブさせる元の値。ここに入れた項目の數値すうち變更へんかうするとTargetの値が追從する

  • Target驅動ドライブする先の値。通常、ここの項目の値は變更へんかうできない

  • WriteBack: チェックを入れると、Target側の値も變更へんかうできるやうになる。つまり、雙方向さうはうかう驅動ドライブが可能になる

「新規作成」から作れる3D物體オブジェクトにも「ValueCopy」が最初から仕込まれてゐる

例へばこの「Box」は、ValueCopy<float3> で「BoxMesh」のsizeをSourceに、「BoxCollider」のsizeをTargetにしてゐる。

Driveされてゐる値は背景が紫色になってゐる

これは、メッシュの大きさと、當たり判定の大きさとを一致させるためである。

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