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获取像素比切换不同的手机型号可能会有误差。