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

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

用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;
    }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存