3d世界坐标 和 NGUI坐标 互转

3d世界坐标 和 NGUI坐标 互转


    /// <summary>
    /// 把3d世界坐标转换NGUI坐标,并赋值uiwidget
    /// </summary>
    /// <param name=" _3dPos "> 必须在3d相机的视野范围内,否则转换错误 </param>
    /// <param name=" _3d "></param>
    /// <param name=" _2d "></param>
    /// <param name=" uiWidget "></param>
    /// <returns></returns>
    public static Vector3 WorldToNgui( Vector3 _3dPos, Camera _3d, Camera _2d, UIWidget uiWidget)
    {
        Vector3 pos = _3d.WorldToViewportPoint(_3dPos);
        uiWidget.transform.position = _2d.ViewportToWorldPoint(pos);
        pos = uiWidget.transform.localPosition;
        pos.x = Mathf .FloorToInt(pos.x);
        pos.y = Mathf .FloorToInt(pos.y);
        pos.z = 0f;
        uiWidget.transform.localPosition = pos;
        return pos;
    }
    /// <summary>
    /// NGUI 坐标转世界坐标
    /// </summary>
    /// <param name=" worldcamera "></param>
    /// <param name=" uiCamera "></param>
    /// <param name=" uiPos "></param>
    /// <returns></returns>
    public static Vector3 NguiToWorld( Camera uiCamera, Camera worldcamera, Vector3 uiPos)
    {
        if (worldcamera == null || uiCamera == null )
        {
            return Vector3 .zero;
        }
        Vector3 pos = uiCamera.WorldToScreenPoint(uiPos);         //NGUI坐标转屏幕坐标
        pos.z = 1f; //设置为零时转换后的pos全为0,屏幕空间的原因,被坑过的我提醒大家,切记要改!
        pos = worldcamera.ScreenToWorldPoint(pos);    //屏幕坐标转NGUI坐标
        pos.y = 0f;
        return pos;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值