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