Unity Event System
ClientSimは、アクションをUnityのEventSystemに変換するために2つのクラスを使用します。これらのクラスは、Unityの古い入力システムをClientSimの現在のバインディングに基づいた値に分離し、VRChatのインタラクティブなUIオブジェクトフィルタリングと一致させます。
BaseInput
ClientSimBaseInput システムは、Unity の BaseInput クラスを拡張したものです。Unity の BaseInput は、マウスの位置とボタン入力を EventSystem に渡す役割を担います。ClientSim の BaseInput システムはこれらのメソッドをオーバーライドし、代わりに現在の ClientSim 入力バインディングと直近の PlayerRaycaster の結果に基づいた値を渡すようにします。マウス入力は、現在のバインディングの Use Input に置き換えられます。Use 入力は手に依存するアクションであるため、最後にアクティブになった手の値のみがマウス入力として渡されます。Event System に送信されるマウス位置は実際のマウス位置を無視し、代わりに直近のインタラクトレイキャストのスクリーン位置を計算して使用します。レイキャスト位置を使用することで実際のマウス位置を抽象化しており、デスクトップモードと VR モードの両方で同じシステムを介して Unity UI を操作できるようになっています。
BaseInput システムは、現在のマウス位置を ClientSim の他の部分に提供する役割も担っています。このシステムは、マウスカーソルを非表示にして画面中央に固定するか、表示して自由に動かせるようにするかを制御します。このマウス位置は、Desktop Reticle の表示や、DesktopRayProvider のレイ(光線)の方向を作成するためのマウス操作に使用されます。
InputModule
ClientSimInputModuleは、UnityのStandaloneInputModuleを拡張したものです。このシステムはUnityのマウスイベントを処理し、現在インタラクトできないUIオブジェクトを除外します。UIオブジェクトがインタラクト可能となるのは、以下のすべての条件を満たしている場合です。
- PlayerRaycasterが最後に
VRC_UIShapeコンポーネントを持つオブジェクトにヒットしたこと。このデータはClientSimBaseInputを介して提供されます。 - UIオブジェクトの親にUIShapeコンポーネントが存在すること
- 親の
UIShapeオブジェクトのレイヤーが、現在インタラクト可能なレイヤーであること。インタラクト可能なレイヤーはInteractiveLayerProviderによって決定されます。 - UIオブジェクトのレイキャストのヒットポイントが、UIShapeのコライダー内に含まれていること。これらの条件のいずれかが満たされない場合、そのUIを操作することはできません。
最終更新: