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;