設定全般用ウィンドウ解説
このページでは設定全般用ウィンドウにある設定項目の作り方を解説します。
各要素を設定する方法を通じて、ご自身のワールド専用のカスタマイズ方法の参考となることを目的としています。
ウィンドウにUIを配置・入れ替える
Sit判定On/Off・高さ調整・椅子コライダーOn/Off
サンプルシーン内にある椅子に関する設定の解説をします。

1. 椅子の配置
SDKに含まれている椅子のサンプル(VRCChair3)を使用します。
サンプルにはSitするためのステーションが最初から含まれているため、異なる椅子を使う場合には適宜読み替えてください。
2. トグルスイッチでSitステーションのOn/Off設定する機構
VRCChair3以下にSitColliderChangerオブジェクトを作成し、Udon Behaviourコンポーネントを追加します。
※どこにどんな名前で作っても構いません。
Udon BehaviourコンポーネントのProgram SourceにはToggleToColliderを設定Synchronization MethodはManualに設定Target ColliderにはSitインタラクト用のコライダーが入ったオブジェクト(ここではVRCChair3)を入れるCollider Changerには紐付けるToggle要素(ここではChair StationのToggle)を入れる

※Note
ToggleToColliderはToggle要素でコライダーのOn/Offを変更するために作りました。
残りの設定可能な項目には下記のような効果があります。
Is Change Trigger:コライダーをOn/Offする代わりに、コライダーのIsTriggerをOn/Offします。Is Inverted:Toggle要素のOn/Offに対して、結果を逆にします。
先ほどUdon Behaviourを設定した際に入れたToggleオブジェクトのインスペクターからToggleコンポーネントを設定します。
- 初期状態でOnにしたい場合は
Is OnをOnに On Value Changed (Boolean)に一つ追加し、先ほど作成したSitColliderChangerをセットUdonBehaviour.SendCustomEvent (string)を選択し、下の入力欄にOnToggleStateChangedと入力

※Note
On Value Changed (Boolean)はこのToggleの状態が変更したときに何をするかという設定です。
ここではSitColliderChangerにあるUdonBehaviour(つまりToggleToCollider)内のOnToggleStateChangedを実行するという意味になります。
パッケージ内のToggleToCollider.csをテキストエディタ等で開くと、OnToggleStateChangedがあることがわかります。
これでSitのOn/Off設定完了です。
ここで解説した設定方法は言い換えると「トグルスイッチで任意のUdonスクリプトを実行(今回はコライダーのOn/Offを設定)」と同じです。応用に役立ててください。
3. スライダーでSit時の高さ調整する機構
VRCChair3直下にあるSeatオブジェクト(VRC_StationコンポーネントでPlayer Enter Locationに設定されているオブジェクト)にAnimatorコンポーネントを追加、ControllerにSeatPositionを設定します。

SeatPositionのアニメーター内に設定されているアニメーションを必要に応じて設定します。
アニメーション内の左のポイントとスライダーが左端が対応、同様にアニメーションの右のポイントがスライダー右端の状態と対応します。

VRCChair3以下にSitAnimationChangerオブジェクトを作成し、Udon Behaviourコンポーネントを追加します。
※どこにどんな名前で作っても構いません。
Udon BehaviourコンポーネントのProgram SourceにはSliderToAnimatorを設定Synchronization MethodはManualに設定Slider Objは対応させたいSliderコンポーネントを含んだオブジェクト(ここではChair StationのSlider)を入れるParameterはValueと入力Animatorはスライダーに対応して動かしたいAnimator(ここではVRCChair3直下のSeatオブジェクト)を入れるMin ValueとMax Valueはそれぞれ0と1を入力

※Note
SliderToAnimatorはSlider要素でアニメーションの変数を変更するために作りました。
Parameterはアニメーターにある変数の名前です。
実際にSeatPositionアニメーターを開き、唯一設定されているState(SeatHeight)のインスペクターを見ると、Valueという名の変数でMotionに設定されたアニメーションの状態にするよう設定されていることがわかります。
うまく使えばより複雑な機構も実現できます。
先ほどUdon Behaviourを設定した際に入れたSliderオブジェクトのインスペクターからSliderコンポーネントを設定します。
- 初期状態の値を
Valueで設定します On Value Changed (Single)に一つ追加し、先ほど作成したSeatAnimatorChangerをセットUdonBehaviour.SendCustomEvent (string)を選択し、下の入力欄にOnSliderValueChangedと入力

これでSit時の高さ調整とスライダーを紐付けできました。 ここで解説した設定方法は言い換えると「スライダーでアニメーターの変数を変更する設定」と同じです。応用に役立ててください。
4. トグルスイッチで椅子のコライダーOn/Off設定する機構
ここでは手順2で行う内容とほとんど同じです。
違いは椅子そのものにコライダーがないため、VRC_chair_udonオブジェクトにMesh Colliderコンポーネントを追加しています。
後は手順2と同じような手順で、追加したMesh ColliderをトグルでOn/Offできるようになります。
是非付属のサンプルシーンで確認したり、自身で試して理解を深めるのに役立ててください。
トグルスイッチのグループで、オブジェクトの出現状態を切り替える
Cube Exampleの各Cubeボタン(1~3)を押すと、対応した別のCubeオブジェクトが出現(有効化)します。
この項目では下記を説明します。
- 各トグルが押された時にオブジェクトを有効化/無効化する方法
- 複数のトグルをまとめて排他制御する設定

1. 有効化/無効化するオブジェクトを作成
必要なオブジェクトを拵えてください。ここでは例としてサンプルシーンの中にあるCube 1~Cube 3を使います。
2. トグル毎にオブジェクトを紐付ける(ここではx3)
3つあるToggleオブジェクト全てに対して下記設定をします
- 初期状態でOnにしたい場合は
Is OnをOnに(3つのうち1つしかOnにできません) On Value Changed (Boolean)に一つ追加し、紐付けたいオブジェクト(Cube 1~Cube 3)をセットGameObject.SetActive (bool)を選択

※Note
もしSitのOn/Offについて熟読したのであれば、Udonに関する設定が今回はないことがわかると思います。
今回のようにGameObject.SetActive (bool)を選んだプルダウンメニューから選択できるものであれば、比較的簡単にトグルと紐付けできます。(超重要)
3. 初期でOffのオブジェクトを無効化しておく
サンプルシーンではCube 1のみがデフォルトOnで、残りの2と3はデフォルトオフであるため、オブジェクトの初期状態をその設定にあわせます。

※Note
もしSitのOn/Offについて熟読したのであれば、そちらでは初期状態に合わせた設定をしていないことがわかると思います。
あちらでは設定したUdon Behaviourのスクリプト内で、トグルやスライダーの初期値を見て、その状態に自動で合わせるための仕組みが既に入っているからです。
そのため、今回のようなUnityの機構だけで実現する場合や、あるいはUdonスクリプトでも自動で初期状態を合わせる配慮がされていない場合は、自分で正しい初期状態になるよう設定しておく必要があります。
4. 排他制御の設定
サンプルとして設定されているCube Exampleでは、各ボタンを押すと他のボタンがオフになります。
このような動きを排他制御と呼び、これはただToggleコンポーネントのオブジェクトを寄せ集めただけでは実現しません。
ToggleGroupElementオブジェクトを見ると、Toggle Groupコンポーネントがついていることがわかると思います。

※Note
Allow Switch OffをOnにすると、排他制御しているトグルボタン全てがオフになる状態にできます。 この設定の初期値はOffのため、トグルたちのどれか一つはOnのままにされます。
ToggleGroupElement直下の3つのToggle設定にGroupという項目があります。
ここに先ほどのToggleGroupElementを設定することで、同じグループにまとめられたトグルを排他制御できます。

排他制御をやめて個別に動作させたい場合は、このGroup設定を削除してNoneにします。
ピックアップオブジェクトを初期位置に戻す機構
動かしたオブジェクトを片付けるボタンについて解説します。

1. ピックアップオブジェクトを用意
必要なオブジェクトをご用意ください。ここでは例としてサンプルシーン内にあるPickupCylinderを用いて説明します。
2. ボタンオブジェクトにUdonスクリプトを設定
ボタンが押された時に設定されたオブジェクトを初期位置に戻すスクリプトを設定します。
ButtonElementオブジェクトにUdon Behaviourを追加Program SourceにはResetPositionを設定- ボタンが押された時に片付けたいオブジェクトを
Target Objectsに設定(ここではPickupCylinder)
※別のオブジェクトにUdon Behaviourを追加して読み替えても問題ありません。

ButtonElementオブジェクトのButtonコンポーネントを設定し、ボタンが押した時に上記スクリプトを実行する設定をします。
On Click ()にResetPositionを設置したオブジェクト(ここではButtonElement自身)を設定UdonBehaviour.SendCustomEvent (string)を選択し、下の入力欄にInvokeと入力

ここで解説した設定方法は言い換えると「ボタンで任意のUdonスクリプトを実行(今回は片付け)」と同じです。応用に役立ててください。