当前位置: 首页 > article >正文

Unity生成微信小游戏按钮坐标转换问题

微信小游戏想要获取用户敏感数据,必须生成官方自己的按钮,如果你是Unity开发的话,这个按钮生成就很麻烦,可以通过UI的顶点坐标来计算,然后把Y轴反转一下,因为微信小游戏是左上角为原点,而Unity是左下角为原点,如果你发现怎么计算都对不上,那么这里提供一个最笨的方法,就是在按钮左上角和右下角分别放一个空的对象。

如图所示

然后对这两个对象的坐标进行计算,非常简单,代码如下:

public static void WXGetGameClubBtn(GameObject pos1,GameObject pos2)
{
     Vector3 minCPos = CameraManager.UICamera.WorldToScreenPoint(pos1.transform.position);
     Vector3 mxnCPos = CameraManager.UICamera.WorldToScreenPoint(pos2.transform.position);
     string vect = minCPos.x + "|" + (CameraManager.UICamera.pixelHeight - minCPos.y) + "|" +(mxnCPos.x - minCPos.x) + "|" + (mxnCPos.y -minCPos.y);
     Debug.LogError(vect);
} 

 到这里还没结束,拿到坐标以后需要除以像素比,每个数据都除以像素比就行了,这一套逻辑不管是在C#用微信的SDK还是在JS都适用,这里贴出JS的代码示例:

function GetPlayerInfo(posData){
    const csvString = posData.split('|');
    var xposs  = parseFloat(csvString[0]) / window.devicePixelRatio
    var yposs  = parseFloat(csvString[1]) / window.devicePixelRatio
  	var wposs  = parseFloat(csvString[2]) / window.devicePixelRatio
    var hposs  = parseFloat(csvString[3]) / window.devicePixelRatio
    if( xposs < 0 ){xposs = -xposs}
    if( yposs < 0 ){yposs = -yposs}
    if( wposs < 0 ){wposs = -wposs}
    if( hposs < 0 ){hposs = -hposs}
    wx.getSetting({success (res){
        if (res.authSetting['scope.userInfo']) {
            wx.getUserInfo({
                success: function(res) {
                  console.log('getinfo OOOK:');
                }
            })
        } 
        else
        {
        let button = wx.createUserInfoButton({
            type: '',
            text: '',
            style: {
            left: xposs,
            top: yposs,
            width: wposs,
            height: hposs,
            backgroundColor: '#0000000',
            }
        })
        }
    }
})
}

要注意这里必须是除以系统像素比window.devicePixelRatio,如果wx.getWindowInfo().pixelRatio获取像素比切换不同的手机型号可能会有误差。

 


http://www.kler.cn/news/343533.html

相关文章:

  • JAVA思维提升案例5
  • C++ osgEarth 多窗口 同步绘制geometry
  • 股指期货的杠杆是怎么体现和使用的?
  • 最新PHP礼品卡回收商城 点卡回收系统源码_附教程
  • 旅游管理系统开发新篇章:SpringBoot技术解析
  • 基于SSM的线上学习网站【附源码】
  • ORM框架简介
  • JVM和GC案例详解
  • 进程同步问题
  • TCP连接的三次握手与四次挥手详解
  • 项目管理系统介绍,核心概念与操作技巧
  • Python3一些常用的SSH连接_paramiko使用
  • 调度算法-先来先服务
  • EtherNet IP网关HT3S-EIS-MDN读取七星华创CS310空气流量计数据应用案例
  • JavaScript 代码行前添加分号
  • 【部署分布式数据库DBMS】
  • 机房空调远程控制-Thingsboard MQTT 接口说明
  • 吐槽kotlin之垃圾设计
  • 用Electron时候碰到的小问题
  • <OS 有关> Docker.Desktop - Unexpected WSL error #14030 不能启动, 问题已经解决 fixed