UGUI适配问题 1.UI坐标与屏幕坐标转换

用UGUI开发项目Canvas的适配一般都会选择Scale With Screen Size 模式

1.适配方案

竖屏游戏,一般会根据宽进行适配
横屏游戏,根据高适配
竖屏游戏适配
上面是我横屏游戏的适配属性。

2.各种分辨率

游戏开发时会有一个基础的设计分辨率,比如上面的游戏,设计分辨率即为 1080 * 1920
但在游戏实际运行时会遇到各种各样不同的分辨率
以12.9英寸iPad Pro为例,屏幕分辨率2048*2732
当游戏以Ipad分辨率运行时,会发生适配,由于竖屏游戏按照宽来适配,因此发生适配后UI大小进行计算时,宽不会改变,仍旧为1080,iPad的高为宽的 2732/2048 = 1.334倍,因此换算后的高为
1080X1.334 = 1440
iPad的最终换算分辨率1080 * 1440 (小数部分已略去)

屏幕坐标左下角为(0,0)点,右上角为(Screen.Width,Screen.Height)点。

3.从UI偏移量到屏幕坐标偏移量

偏移
当我点击A时,A会播放动画,使自身的本地坐标向上偏移200单位到B
我希望实际计算也以B点进行计算。
我利用Unity提供的IPointerDownHandler接口获取到的是屏幕坐标

public void OnPointerDown(PointerEventData eventData) {
        this.eventData = eventData;
    }

现在我点击了屏幕上的A点,获得是屏幕A点的屏幕坐标假定为(100,100);
那么如何计算出B点的屏幕坐标
各个分辨率
UI物体的本地坐标向上偏移200单位,其实是在换算分辨率里向上移动了200单位,屏幕分辨率和换算分辨率是同比扩大的关系,因此在屏幕分辨率中就需要向上移动 2048/1080 * 200 = 379个单位。
B点的屏幕坐标即为(100,100 + 379)= (100,479)

最后我们会得到一个非常简单的公式
如果按照宽进行适配

public float GetOffset() {
        //设计UI偏移量(Y值偏移)
        float designOffsetY = 200;
        //游戏设计分辨率的宽
        float designWidth = 1080;
        //计算出的屏幕坐标的Y值偏移量
        float screenOffsetY = Screen.width / designWidth * designOffsetY;
        return screenOffsetY;
    }

按照高适配也是同理

public float GetOffset()
    {
        //设计UI偏移量(Y值偏移)
        float designOffsetY = 200;
        //游戏设计分辨率的高
        float designHeight = 1920;
        //计算出的屏幕坐标的Y值偏移量
        float screenOffsetY = Screen.height / designHeight * designOffsetY;
        return screenOffsetY;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值