マウスの場所にImageやGuiパーツを表示する方法【Unity】
マウスなどで画面内をクリックした場所にUIの素材(例えばボタンとか)を表示したい場合のプログラム。タップした場所にImageなどを表示する場合などに使うことが出来ます。下図はマウスカーソルの位置に白い画像がずっとくっついて動きます。
マウスの場所にImageやGuiパーツを表示
マウスの位置を追従するスクリプトは以下。スクリプトの後に、設定方法や使っている内容の解説。
常にカーソル(マウス)の位置を追いかける処理のスクリプト
public class CursorImage : MonoBehaviour
{
public Canvas m_canvasRoot;
public RectTransform m_rtParent;
public RectTransform m_rtTarget;
void Update()
{
Vector2 MousePos = Vector2.zero;
RectTransformUtility.ScreenPointToLocalPointInRectangle(
m_rtParent,
Input.mousePosition ,
m_canvasRoot.worldCamera,
out MousePos);
m_rtTarget.anchoredPosition = new Vector2(
MousePos.x,
MousePos.y);
}
}
インスペクターなんかの設定の仕方
上記のスクリプトでは、インスペクターでは3つ設定する必要があります。
インスペクター | 説明 |
CanvasRoot | 操作したいUIの根本のCanvas |
RtParent | 操作したいUIの直近の親 |
RtTarget | 操作したいUI |
スクリプト内の機能とかの説明
RectTransformUtility.ScreenPointToLocalPointInRectangleを使って、マウスポインターの位置から、対象の座標を取得することが出来ます。
public static bool ScreenPointToLocalPointInRectangle (RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint);
引数 | 説明 |
rect | 内部の点を見つけるための RectTransform。 |
cam | スクリーン空間位置に関連するカメラ。 |
screenPoint | スクリーン空間位置。 |
localPoint | Rect Transform のローカル空間でのポイント。 |
out で取得できるlocalPointを移動させたいRectTransform.anchoredPositionにセットすることで移動させることが出来ます。ヒエラルキーの親子関係が変化すると、うまく表示ができなくなるので注意して下さい。