UGUI_UI子节点在Canvas的2D坐标

来源:互联网 发布:环球数码 知乎 编辑:程序博客网 时间:2024/06/03 21:27

 

首先我们要搞清楚 transform.postion rectTransform.anchoredPosition  这两个坐标是完全不一样的。前面的是3D坐标,后面的是2DRect里的坐标,并且还是相对坐标,那么节点深了坐标就更不好换算了。

C#

1

2

3

4

5

6

7

8

9

    public Canvas canvas;

  

    void Start(){

        Vector2 pos;

        if(RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, transform.position, canvas.camera, out pos)){

            Debug.Log(pos);

        }

  

    }

所以上述代码就是用UI元素的世界坐标和canvasRectTrasform再加上UI摄像机,换算出元素在Canvas2D坐标。

最后在想需要赋值的UI  rectTransform.anchoredPosition pos 就可以了。。

怎么通过鼠标的坐标在屏幕上移动来更新UI的显示位置。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

using UnityEngine;

using System.Collections;

  

public class NewBehaviourScript : MonoBehaviour {

  

    Canvas canvas;

    RectTransform rectTransform;

    // Use this for initialization

    void Start ()

    {

        rectTransform = transform as RectTransform;

        canvas = GameObject.Find("Canvas").GetComponent<Canvas>();

    }

    

    // Update is called once per frame

    void Update () {

        Vector2 pos;

        if(RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform, Input.mousePosition, canvas.worldCamera, out pos)){

            rectTransform.anchoredPosition = pos;

        }

    }

}

  

原创粉丝点击