YuminekoGame
6/27/2019 - 5:26 AM

ClickToRectTransform

クリックした位置を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;
        }
    }
}