成都网站建设设计

将想法与焦点和您一起共享

Unity中如何实现3D坐标转换UGUI坐标

这篇文章主要为大家展示了“Unity中如何实现3D坐标转换UGUI坐标”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Unity中如何实现3D坐标转换UGUI坐标”这篇文章吧。

创新互联专注于呼伦贝尔网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供呼伦贝尔营销型网站建设,呼伦贝尔网站制作、呼伦贝尔网页设计、呼伦贝尔网站官网定制、微信小程序定制开发服务,打造呼伦贝尔网络公司原创品牌,更为您提供呼伦贝尔网站排名全网营销落地服务。

0.前言

实际开发中,我们经常会遇到需要3D与2D坐标转换的问题,比如血条同步跟随人物移动、伤害数字在人物头上出现、从2D背包中拖动一个UI到3D物体上等情况,这些其实本质上都是3D坐标与UI坐标转换的问题。

1.核心思想

3D坐标转成UI坐标其实就是先转成屏幕坐标,再由屏幕坐标转换成UI坐标。

所以坐标转换分为三个部分

  • 3D坐标

  • 屏幕坐标

  • UI坐标

其中Unity的屏幕坐标系规定,左下角是原点,X轴向右是正方向,Y轴向上是正方向。

作为额外补充的一个知识点,GUI的坐标系规定左上角是原点,X轴向右为正方向,Y轴向下为正方向,跟屏幕坐标是不一样的,但是此篇我们用不到这个知识点。

这里UI坐标指的是UGUI的坐标,所以我们在计算的时候就需要用的Canvas相关的参数

2.代码示例

在此以血条跟随人物移动为需求,完成坐标转换的核心代码

using UnityEngine;
public class HPFollow : MonoBehaviour{    // 人物头顶    public Transform heroHeadTrans;        // 摄像机,不使用Camera.main是因为性能消耗比较大    public Camera mainCamera;
   // 血条    public RectTransform hpTrans;
   // Canvas    public RectTransform canvasTrans;
   // Update is called once per frame    void Update()    {        // 先将3D坐标转换成屏幕坐标        Vector2 screenPoint = RectTransformUtility.WorldToScreenPoint(mainCamera, heroHeadTrans.position);
       // 再将屏幕坐标转换成UGUI坐标        Vector2 localPoint;
       if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasTrans, screenPoint, mainCamera, out localPoint))        {            hpTrans.anchoredPosition = localPoint;        }    }}

别忘了修改Canvas的RenderMode

Unity中如何实现3D坐标转换UGUI坐标

以上是“Unity中如何实现3D坐标转换UGUI坐标”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


本文名称:Unity中如何实现3D坐标转换UGUI坐标
链接URL:http://chengdu.cdxwcx.cn/article/pgdedc.html