Unity世界坐标转换屏幕坐标在自适应分辨率下的应用

本文介绍了在Unity中如何使用Camera的WorldToScreenPoint和WorldToViewportPoint方法将3D场景坐标转换为屏幕坐标,特别是在自适应分辨率下处理Canvas UI的位置。文章详细解释了Canvas Scaler组件在自适应适配中的作用,以及在不同屏幕匹配模式下如何正确计算UI组件的位置。同时,提到了WorldToViewportPoint方法,并说明了如何将其转换结果应用于UI坐标计算。
摘要由CSDN通过智能技术生成

项目中,经常会用到将3D场景中的物体坐标转换到屏幕坐标,然后设置UI在转换后的位置上。

一、Camera.WorldToScreenPoint

官方的描述是:Transforms position from world space into screen space.
Screenspace is defined in pixels. The bottom-left of the screen is (0,0); the right-top is (pixelWidth,pixelHeight). The z position is in world units from the camera.

这里要明确的是,通过该方法获得的是屏幕坐标,比如设备是1080 x 1920的分辨率,那么转换后的坐标范围就是从屏幕左下角 (0, 0) 点到屏幕右上角 (1080, 1920)的。但是这个转换后的坐标是不是可以直接赋值给Canvas上的组件使用,那就需要依Canvas的情况而定了,尤其需要做自适应适配时,不同分辨率适配,位置计算需要注意。

这里先介绍下Canvas的组件Canvas Scaler,分辨率自适应神器。通常情况下,UI Scale Mode不同,处理方式也不同。这里暂时只讨论 Scale With Screen Size,这是最常用的一种自适应适配模式,下面会要求填入Reference Resolution(参考分辨率),屏幕的匹配模式Screen Match Mode一般选择Match Width Or Height。width和height设置权重来调节影响比例模式。如下图所示,参考分辨率是1080 x 1920,屏幕分辨率也是1080 x 1920。

在这里插入图片描述

举个例子:如参考分辨率设置为1080 x1920, Match设为0,即根据宽度来适配,当屏幕分辨率设置为1536 x 2048时,画布的宽和高也被适配成了1080 x 1440, (即以宽为原则,高等比缩放, 1080 / 1536 x 2048 ,1080 x 1440就是经过Canvas Scaler处理过的宽和高)。反之Match设为1,那便根据高度来适配。如下图所示。

在这里插入图片描述
再说回WorldToScreenPoint ,通过它转换出的坐标是基于屏幕分辨率的,那么想要转换成Canvas上的坐标,由于Canvas Scaler的影响,就需要进一步计算,而计算所用的宽和高,就不能用参考分辨率的,要是用经过Canvas Scaler处理过的宽和高。处理如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值