クリックした位置をRectTransformに変換。 さらに変換した座標をもとにuGUIを生成。
using UnityEngine;
public class ClickToRectTransform : MonoBehaviour {
// uGUIのprefab
[SerializeField] private GameObject uiPrefab;
[SerializeField] private Canvas canvas;
// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown (0)) {
// ScreenSpace Overlayの場合はnullを代入しないとバグる
var camera = (canvas.renderMode == RenderMode.ScreenSpaceOverlay) ? null : canvas.worldCamera;
// Prefab生成&子Object化
var item = Instantiate (uiPrefab);
item.transform.SetParent (transform);
// クリックしたスクリーン座標をRectTransformのローカル座標へに変換
Vector2 localpos;
var canvasRect = canvas.GetComponent<RectTransform> ();
RectTransformUtility.ScreenPointToLocalPointInRectangle (canvasRect, Input.mousePosition, camera, out localpos);
// 生成したPrefabの座標・角度・スケールを調整
var itemRect = item.GetComponent<RectTransform> ();
var prefabRect = uiPrefab.GetComponent<RectTransform> ();
itemRect.localPosition = localpos;
itemRect.localEulerAngles = prefabRect.localEulerAngles;
itemRect.localScale = prefabRect.localScale;
}
}
}