UGUI世界坐标转屏幕坐标

来源:互联网 发布:微店和淘宝店哪个可靠 编辑:程序博客网 时间:2024/06/10 02:44

在使用NGUI中有专用的方法将3D场景中的世界坐标转换为UI屏幕中的2D坐标,在Unity新版的UGUI中,将世界坐标转换为屏幕坐标需通过以下几步来实现;

第一:将UI的锚点设为左下角,有的UI无法设置锚点是因为你的该组件或该组件的父物体没有添加RecTransform组件,添加该组件后调整它的锚点为左小脚;

第二:调用以下代码来转换坐标

 /// <summary>
    /// 世界坐标转UI屏幕坐标
    /// </summary>
    /// <param name="wordPosition"></param>
    /// <returns></returns>
    public static Vector2 WordToScenePoint(Vector3 wordPosition)
    {
        CanvasScaler canvasScaler = GameObject.Find("Canvas").gameObject.GetComponent<CanvasScaler>();

        float resolutionX = canvasScaler.referenceResolution.x;

        float resolutionY = canvasScaler.referenceResolution.y;

        float offect = (Screen.width / canvasScaler.referenceResolution.x) * (1 - canvasScaler.matchWidthOrHeight) + (Screen.height / canvasScaler.referenceResolution.y) * canvasScaler.matchWidthOrHeight;

        Vector2 a = RectTransformUtility.WorldToScreenPoint(Camera.main, wordPosition);

        return new Vector2(a.x / offect, a.y / offect);;
    }
第三:将上步计算的Vector2赋给UI组件
 mImageTargeRec.anchoredPosition = WordToScenePoint(wordPosition);

0 0
原创粉丝点击