設定全般用ウィンドウ解説

このページでは設定全般用ウィンドウにある設定項目の作り方を解説します。
各要素を設定する方法を通じて、ご自身のワールド専用のカスタマイズ方法の参考となることを目的としています。

ウィンドウにUIを配置・入れ替える

移動可能ウィンドウにuiコンポーネントを追加する方法を参照

Sit判定On/Off・高さ調整・椅子コライダーOn/Off

サンプルシーン内にある椅子に関する設定の解説をします。

設定全般用ウィンドウ解説1-1

1. 椅子の配置

SDKに含まれている椅子のサンプル(VRCChair3)を使用します。
サンプルにはSitするためのステーションが最初から含まれているため、異なる椅子を使う場合には適宜読み替えてください。

2. トグルスイッチでSitステーションのOn/Off設定する機構

VRCChair3以下にSitColliderChangerオブジェクトを作成し、Udon Behaviourコンポーネントを追加します。
※どこにどんな名前で作っても構いません。

  • Udon BehaviourコンポーネントのProgram SourceにはToggleToColliderを設定
  • Synchronization MethodManualに設定
  • Target ColliderにはSitインタラクト用のコライダーが入ったオブジェクト(ここではVRCChair3)を入れる
  • Collider Changerには紐付けるToggle要素(ここではChair StationのToggle)を入れる

設定全般用ウィンドウ解説1-2

※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と入力

設定全般用ウィンドウ解説1-3

※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コンポーネントを追加、ControllerSeatPositionを設定します。

設定全般用ウィンドウ解説1-4

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

設定全般用ウィンドウ解説1-5

VRCChair3以下にSitAnimationChangerオブジェクトを作成し、Udon Behaviourコンポーネントを追加します。
※どこにどんな名前で作っても構いません。

  • Udon BehaviourコンポーネントのProgram SourceにはSliderToAnimatorを設定
  • Synchronization MethodManualに設定
  • Slider Objは対応させたいSliderコンポーネントを含んだオブジェクト(ここではChair StationのSlider)を入れる
  • ParameterValueと入力
  • Animatorはスライダーに対応して動かしたいAnimator(ここではVRCChair3直下のSeatオブジェクト)を入れる
  • Min ValueMax Valueはそれぞれ01を入力

設定全般用ウィンドウ解説1-6

※Note
SliderToAnimatorはSlider要素でアニメーションの変数を変更するために作りました。
Parameterはアニメーターにある変数の名前です。
実際にSeatPositionアニメーターを開き、唯一設定されているState(SeatHeight)のインスペクターを見ると、Valueという名の変数でMotionに設定されたアニメーションの状態にするよう設定されていることがわかります。
うまく使えばより複雑な機構も実現できます。

先ほどUdon Behaviourを設定した際に入れたSliderオブジェクトのインスペクターからSliderコンポーネントを設定します。

  • 初期状態の値をValueで設定します
  • On Value Changed (Single)に一つ追加し、先ほど作成したSeatAnimatorChangerをセット
  • UdonBehaviour.SendCustomEvent (string)を選択し、下の入力欄にOnSliderValueChangedと入力

設定全般用ウィンドウ解説1-6

これでSit時の高さ調整とスライダーを紐付けできました。 ここで解説した設定方法は言い換えると「スライダーでアニメーターの変数を変更する設定」と同じです。応用に役立ててください。

4. トグルスイッチで椅子のコライダーOn/Off設定する機構

ここでは手順2で行う内容とほとんど同じです。 違いは椅子そのものにコライダーがないため、VRC_chair_udonオブジェクトにMesh Colliderコンポーネントを追加しています。
後は手順2と同じような手順で、追加したMesh ColliderをトグルでOn/Offできるようになります。
是非付属のサンプルシーンで確認したり、自身で試して理解を深めるのに役立ててください。

トグルスイッチのグループで、オブジェクトの出現状態を切り替える

Cube Exampleの各Cubeボタン(1~3)を押すと、対応した別のCubeオブジェクトが出現(有効化)します。
この項目では下記を説明します。

  • 各トグルが押された時にオブジェクトを有効化/無効化する方法
  • 複数のトグルをまとめて排他制御する設定

設定全般用ウィンドウ解説2-1

1. 有効化/無効化するオブジェクトを作成

必要なオブジェクトを拵えてください。ここでは例としてサンプルシーンの中にあるCube 1Cube 3を使います。

2. トグル毎にオブジェクトを紐付ける(ここではx3)

3つあるToggleオブジェクト全てに対して下記設定をします

  • 初期状態でOnにしたい場合はIs OnをOnに(3つのうち1つしかOnにできません)
  • On Value Changed (Boolean)に一つ追加し、紐付けたいオブジェクト(Cube 1Cube 3)をセット
  • GameObject.SetActive (bool)を選択

設定全般用ウィンドウ解説2-2

※Note
もしSitのOn/Offについて熟読したのであれば、Udonに関する設定が今回はないことがわかると思います。
今回のようにGameObject.SetActive (bool)を選んだプルダウンメニューから選択できるものであれば、比較的簡単にトグルと紐付けできます。(超重要)

3. 初期でOffのオブジェクトを無効化しておく

サンプルシーンではCube 1のみがデフォルトOnで、残りの2と3はデフォルトオフであるため、オブジェクトの初期状態をその設定にあわせます。

設定全般用ウィンドウ解説2-3

※Note
もしSitのOn/Offについて熟読したのであれば、そちらでは初期状態に合わせた設定をしていないことがわかると思います。
あちらでは設定したUdon Behaviourのスクリプト内で、トグルやスライダーの初期値を見て、その状態に自動で合わせるための仕組みが既に入っているからです。
そのため、今回のようなUnityの機構だけで実現する場合や、あるいはUdonスクリプトでも自動で初期状態を合わせる配慮がされていない場合は、自分で正しい初期状態になるよう設定しておく必要があります。

4. 排他制御の設定

サンプルとして設定されているCube Exampleでは、各ボタンを押すと他のボタンがオフになります。
このような動きを排他制御と呼び、これはただToggleコンポーネントのオブジェクトを寄せ集めただけでは実現しません。

ToggleGroupElementオブジェクトを見ると、Toggle Groupコンポーネントがついていることがわかると思います。

設定全般用ウィンドウ解説2-4

※Note
Allow Switch OffをOnにすると、排他制御しているトグルボタン全てがオフになる状態にできます。 この設定の初期値はOffのため、トグルたちのどれか一つはOnのままにされます。

ToggleGroupElement直下の3つのToggle設定にGroupという項目があります。
ここに先ほどのToggleGroupElementを設定することで、同じグループにまとめられたトグルを排他制御できます。

設定全般用ウィンドウ解説2-5

排他制御をやめて個別に動作させたい場合は、このGroup設定を削除してNoneにします。

ピックアップオブジェクトを初期位置に戻す機構

動かしたオブジェクトを片付けるボタンについて解説します。

設定全般用ウィンドウ解説3-1

1. ピックアップオブジェクトを用意

必要なオブジェクトをご用意ください。ここでは例としてサンプルシーン内にあるPickupCylinderを用いて説明します。

2. ボタンオブジェクトにUdonスクリプトを設定

ボタンが押された時に設定されたオブジェクトを初期位置に戻すスクリプトを設定します。

  • ButtonElementオブジェクトにUdon Behaviourを追加
  • Program SourceにはResetPositionを設定
  • ボタンが押された時に片付けたいオブジェクトをTarget Objectsに設定(ここではPickupCylinder

※別のオブジェクトにUdon Behaviourを追加して読み替えても問題ありません。

設定全般用ウィンドウ解説3-2

ButtonElementオブジェクトのButtonコンポーネントを設定し、ボタンが押した時に上記スクリプトを実行する設定をします。

  • On Click ()ResetPositionを設置したオブジェクト(ここではButtonElement自身)を設定
  • UdonBehaviour.SendCustomEvent (string)を選択し、下の入力欄にInvokeと入力

設定全般用ウィンドウ解説3-3

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