設定全般用ウィンドウ解説
このページでは設定全般用ウィンドウにある設定項目の作り方を解説します。
各要素を設定する方法を通じて、ご自身のワールド専用のカスタマイズ方法の参考となることを目的としています。
ウィンドウに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スクリプトを実行(今回は片付け)」と同じです。応用に役立ててください。