游戏世界坐标转化为UGUI屏幕坐标

来源:互联网 发布:装置艺术 网站 知乎 编辑:程序博客网 时间:2024/06/06 02:11

很多时候,我们需要把游戏场景里面的坐标转化为在ugui中显示的坐标。比如,血条的制作。 代码如下;

      /// <summary>
        /// 游戏场景里的对象的世界坐标转化到ui界面上的坐标
        /// 赋值操作  对象.transform.position =返回值
        /// </summary>
        /// <param name="canvas">需要转化到的uicanvas</param>
        /// <param name="worldGo">对象在游戏场景中的世界坐标</param>
        /// <returns>转化到ui视图下的坐标</returns>
     
        public static Vector3 WorldToUIPoint(Canvas canvas,Transform worldGo)
        {
            Vector3 v_v3 = Camera.main.WorldToScreenPoint(worldGo.position);
            Vector3 v_ui = canvas.worldCamera.ScreenToWorldPoint(v_v3);
            Vector3 v_new = new Vector3(v_ui.x, v_ui.y, canvas.GetComponent<RectTransform>().anchoredPosition3D.z);
            return v_new;
        }

思想是,首先游戏场景中的摄像机中的物体坐标,也就是世界坐标转化为屏幕坐标;然后,找到canvas上绑定的uicamera ,从ui摄像机中将屏幕坐标转化为世界坐标。这个转化是以ui摄像机为目标视野进行转化的 。此时 如果不考虑z轴的话,那么现实转化效果已经实现了。但是,有时canvas的世界坐标的z 并不是0 ,所以会发现实际目标ui控件的坐标在z轴上有一定偏差,并不是等于0; 所以,需要对转化后的坐标进行z轴设定,设定值 就是canvas的世界坐标的z值 。这样才算是正取的坐标转化。

0 0
原创粉丝点击