![見出し画像](https://assets.st-note.com/production/uploads/images/146177157/rectangle_large_type_2_1fbcb86ff01aebe9458184bbcf2f6ab2.jpeg?width=1200)
Resoniteで複數の値を同期させる方法【ValueField・ValueCopy】
どうも、萬朶櫻です。
複數の物體やコンポーネントに同じ値を當てはめる
その後、その値を一括で變更するかもしれない
このやうな場合、いちいち手入力をしてゐると大變な勞力になるでせう。
そんな時に便利なコンポーネントがあるので、今囘はそれを紹介してみます。
※Bool値の一括管理については、以下の過去記事が參考になるかもしれません。
※もちろん、この記事で紹介するコンポーネントでもBool値を管理できます。
複數の數値を「ValueField<T>」で一括管理してみる例
![](https://assets.st-note.com/img/1720078443095-GpyDJR8G5F.png?width=1200)
ValueFieldの場所は「Data」の中。
![](https://assets.st-note.com/img/1720078443363-iapEY27jcX.png?width=1200)
このコンポーネントで定めた値をコンポーネント等の項目に驅動することで、複數のコンポーネント項目を一括管理することができる。
物體とコンポーネントの準備
例として次のやうな物を作る。
それぞれの物體を全て同じ向き・同じ速さで移動させたい。
![](https://assets.st-note.com/img/1720078189992-hDWP6GnZvl.png?width=1200)
まづは「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」値などをいちいち個別に入力するのは面倒である。
また、後から向きや速さを變更する時にも多くの手間がかかる。
![](https://assets.st-note.com/img/1720078189994-DbKhr3fa1N.png?width=1200)
そこで、このやうに、適當な所にスロットを作り、「ValueField<float3>」を充てる。
「Value」のXの値を1にしておく。
ValueFieldの値を各Pannerに驅動する
次に
![](https://assets.st-note.com/img/1720078189921-1VoNrdPOyw.png?width=1200)
ValueField<float3>の「Value」を右クリックで摑む
「Box - Parent」をダブルクリックしてBoxの内容を表示させる
Boxの内容が表示できたら、
![](https://assets.st-note.com/img/1720078189957-prcJB2qRUE.png?width=1200)
「Panner3D」の「_speed」のところにカーソルを合はせ、離す。
![](https://assets.st-note.com/img/1720078189958-bavuRiyGpc.png)
するとこのやうなメニューが出るので、上の「Drive」を選ぶ。
![](https://assets.st-note.com/img/1720078190094-luBMBjr4UK.png?width=1200)
すると、このやうに、「ValueField<float3>」で設定した値と同じ値が「Panner3D」の「_speed」に充てられる。
このとき、「ValueCopy<float3>」といふコンポーネントが出てくるが、これは値のドライブをしたときに自動で生えてくるコンポーネントなので、氣にしなくてよい。
これと同じ作業を「Cone - Parent」「Sphere - Parent」にも行ふ。
![](https://assets.st-note.com/img/1720078190067-3fu7fzRbc9.png?width=1200)
すると、全ての物體が同じ方向、同じ速度で移動を始める。
「ValueField<float3>」の値を變更すると、それに應じて各物體の動きも同時に變はる。
![](https://assets.st-note.com/img/1720078190042-hJuT4UianV.png?width=1200)
これで各物體の動きを一括管理することができた。
數値を驅動するためのコンポーネント「ValueCopy<T>」について
![](https://assets.st-note.com/img/1720080106184-o4sOx0FgXt.png?width=1200)
單體で充てることもできる
先述の通り、ある値を別の値に驅動させると、そのデータ型に應じて「ValueCopy」が自動で生成される。
他のコンポーネントと同樣に「コンポーネントをアタッチ」から充てることもできる。
場所は「Transform」の「Drivers」の中。
![](https://assets.st-note.com/img/1720080062502-ar0kEm4Hff.png?width=1200)
この方法で充てると、どの値をどの値に驅動させるかが未設定なので、そのあたりを設定する必要がある。
![](https://assets.st-note.com/img/1720080100735-0GZUudV1ul.png?width=1200)
Source: 驅動させる元の値。ここに入れた項目の數値を變更するとTargetの値が追從する
Target: 驅動する先の値。通常、ここの項目の値は變更できない
WriteBack: チェックを入れると、Target側の値も變更できるやうになる。つまり、雙方向に驅動が可能になる
「新規作成」から作れる3D物體にも「ValueCopy」が最初から仕込まれてゐる
![](https://assets.st-note.com/img/1720080585341-1gxQFUxEqi.png?width=1200)
例へばこの「Box」は、ValueCopy<float3> で「BoxMesh」のsizeをSourceに、「BoxCollider」のsizeをTargetにしてゐる。
![](https://assets.st-note.com/img/1720080612828-sdC5qHemLU.png?width=1200)
![](https://assets.st-note.com/img/1720080629086-12mcBUYx75.png?width=1200)
![](https://assets.st-note.com/img/1720080643059-wzMMD2ksl1.png?width=1200)
これは、メッシュの大きさと、當たり判定の大きさとを一致させるためである。