Unity模型世界坐标转屏幕坐标

Unity中经常需要屏幕上的UI跟随物体的功能,所以分享下使用到的方法。

  1. 定义好主相机和界面的主Canvas,将UI的锚点设置为中间;
    在这里插入图片描述
  2. 然后使用以下方式获取转换后屏幕的坐标位置,并且在Update中给UI进行位置设置;
 [Header("主屏幕UI")]
    public GameObject mainCanvas;
  Vector3 tempPos;
    public Vector3 GetWorldToScreenPosition(GameObject target)
    {
        tempPos = Camera.main.WorldToScreenPoint(target.transform.position);

        //先获取主画布下的分辨率宽高:
        RectTransform canvasRt = mainCanvas.GetComponent<RectTransform>();
        float resolutionRatioWidth = canvasRt.sizeDelta.x;
        float resolutionRatioHeight = canvasRt.sizeDelta.y;

        //计算主画布分辨率下的宽高和屏幕的宽高的比列:
        float widthRatio = resolutionRatioWidth / Screen.width;
        float heightRatio = resolutionRatioHeight / Screen.height;

        //计算最终屏幕2D位置坐标:
        //先分别乘以宽高比值
        tempPos.x *= widthRatio;
        tempPos.y *= heightRatio;

        //计算在中心点的屏幕坐标
        tempPos.x -= resolutionRatioWidth * 0.5f;
        tempPos.y -= resolutionRatioHeight * 0.5f;
       // Debug.Log("屏幕位置===" + tempPos);
        return tempPos;
    }
    //设置UI的坐标位置
  void Update()
    {
       this.GetComponent<RectTransform>().anchoredPosition3D = GetWorldToScreenPosition();
    }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值