【Unity】タッチした位置にuGUI(RectTransform)を表示する
お疲れ様です。ぐーるです。
最近はなんかサーバだけではなく、採用だ評価だと色んな所まで見てたりして、
ちょっとアップアップしています。色んな人と会話するのって難しいです。
unityroom以外でもなんかゲーム作ってて、ふと
「指定位置にuGUIでテキストと画像を出したいなー」
と思ったので、実装したのですが、なんか思ったように上手く行かずにちょっと困ったので
メモ代わりにまとめておきます。
タッチした位置にuGUI(RectTransform)を表示する
普通のGameObjectだったらScreenToWorldPoint()とか使いますよね。
こんな感じ。
public GameObject cubePrefab; // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { var mousePosition = Input.mousePosition; mousePosition.z = 10; var pos = Camera.main.ScreenToWorldPoint(mousePosition); var cube = Instantiate(cubePrefab); cube.transform.position = pos; cube.transform.SetParent(this.transform); } }
が、RectTransformではどうするんだろうと言うとこうします。
タッチした位置にInstantiateしてDoTweenでアニメーション付与して終わったら消す。
// uGUIのprefab public GameObject itemPrefab; // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { var canvas = this.GetComponent<Canvas>(); var canvasRect = canvas.GetComponent<RectTransform>(); Vector2 localpoint; RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRect, Input.mousePosition, canvas.worldCamera, out localpoint); var item = Instantiate(itemPrefab); item.transform.SetParent(this.transform); item.GetComponent<RectTransform>().anchoredPosition = localpoint; DoTweenUtil.UpToRectTransform(item); } }
補足でDoTweenのコードも
public static void UpToRectTransform(GameObject gameObject) { var rectTran = gameObject.GetComponent<RectTransform>(); if(rectTran != null) { rectTran.DOMove(new Vector2(0 , 50) , 1.0f) .SetRelative(true) .OnComplete(() => { UnityEngine.Object.Destroy(gameObject); }) .SetEase(Ease.OutCubic) .Play(); } }