Unity对于多分辨率下的血条适配

屏幕分辨率会随着屏幕大小进行动态更改,在unity端进行开发时会先给定一个屏幕分辨率,在开发时,进行相应的坐标转换是没有问题的,但是发布到手机上后会出现血条、飘字等不被适配的情况,具体问题为:
画布Canvas实际使用的值(左)与开发时的值(右)不同,在使用Camera.main.WorldToScreenPoint方法进行转换时,依然使用的是开发时预先设定的值,导致出现了偏差。
这两个位置不一致导致的适配问题

解决方案为:根据当前使用的屏幕宽高和开发时设定的值进行相应的比例计算,然后在使用Camera.main.WorldToScreenPoint方法时,乘以这个比例,即可获得最终的数值显示,关键代码如下:
//获取Canvas预先设定的分辨率
Vector2 re = transform.parent.GetComponent().referenceResolution;
//根据当前的屏幕宽度或者高度计算缩放比例
float rat = re.x / Screen.width;
//UI 位置 = 转化后的屏幕坐标 * 比例
timeText.transform.localPosition = (Camera.main.WorldToScreenPoint(treasureBox.position) + new Vector3(-Screen.width * 0.5f, -Screen.height * 0.5f, 0)) * rat;
代码贴在下面:
Vector2 re = transform.parent.GetComponent<CanvasScaler>().referenceResolution; //根据当前的屏幕宽度或者高度计算缩放比例 float rat = re.x / Screen.width; //UI 位置 = 转化后的屏幕坐标 * 比例 timeText.transform.localPosition = (Camera.main.WorldToScreenPoint(treasureBox.position) + new Vector3(-Screen.width * 0.5f, -Screen.height * 0.5f, 0)) * rat;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值