Technology Blog
技術ブログ
2018.06.08
特定のUI要素上でマウスのローカルポジションを見つける
まず、特定のUI要素が特定されているかどうかを調べる必要があります。UI要素がマウスでクリックされているかどうかを判断する方法は複数ありますが、最も一般的な方法はUnityのPointerEventSystemを使用することです。使用できるようにするには、イベントをトリガーするために必要なさまざまなインターフェースと“using UnityEngine.EventSystems;”というNamespaceを実装する必要があり、SceneのHierarchyにEventSystemを追加することも必要です。また、スクリプトはトリガーされたオブジェクト上にある必要があります。
このEventSystemの詳細については、このリンクをご覧ください:
https://docs.unity3d.com/ScriptReference/EventSystems.PointerEventData.html
EventSystemの実装例を次に示します:
別の方法はUnityのBoundsを使用します。
イメージのようなUIオブジェクトでそれを使用できるようにするには、コライダーを置いてオブジェクトと同じサイズにする必要があります。次に、Boundsを見つかるために、このコライダーコンポーネントをスクリプトで取得します。これにより、マウスの位置がこれらの範囲内にあるかどうかを確認することができます。
Bounds についての詳細は、このリンクをチェックしてください:
https://docs.unity3d.com/ScriptReference/Bounds.html
Bounds の実装例を次に示します:
オブジェクトをHoveringしていることがわかったので、次のステップは、マウスの位置を世界に相対的ではなく、そのオブジェクトに関連させて見つけることです。そのために、UnityのRectTransformUtilityを使用することができます。ローカルのRectTransformを新しいスクリーン位置として設定することができます。
RectTransformUtility についての詳細は、このリンクをしてください:
https://docs.unity3d.com/ScriptReference/RectTransformUtility.html
RectTransformUtility の二つの実装例を次に示します、1つはBoundsシステムを使用し、もう1つはEventSystemを使用します。
Boundsシステム:
EventSystem:
*canvasがScreen space – Overlayに設定されているため、カメラパラメータはnullに設定されています。
このlocal mouse positionはいろいろな使い方ができます。 たとえば、カンバスにある、レンダーテクスチャを使用してミニーマップ上でクリック位置を取得することができます。