Unity设置物体与屏幕成一定关系
发表于2017-12-01
这篇文章和大家讨论的是设置物体与手机屏幕这样一个问题,都知道手机有很多种屏幕,所以做手游开发的开发者都知道在开发的时候要考虑屏幕适配的问题,例如在做一些2D游戏初始化的时候位置设置如果就没有和屏幕尺寸相匹配,在一些手机上运行时会出现游戏开始时主要物品等不在屏幕内的bug。
有时我们按照剧情在3D世界里面初始化物体的时候,也要和屏幕达成一定比例,比如闯过一个关卡,然后界面后面的3D世界放起了烟花,烟花也是要与屏幕成比例的。否则虽然创建很多烟花也能达到屏幕里能看见,但是耗费了性能,而且达不到某种效果,比如有的烟花太近,有的太远。
这里设置和屏幕达到一定关系,比如某个物体距离屏幕右边距100个像素,之前死劲往Unity像素API的地方想,后来查了好多都没有适合的API,回到视频原来可以这样:
temPos = Camera.main.ScreenToWorldPoint(new Vector2(Screen.width - 100, Screen.height)); target.position =new Vector3(temPos.x,temPos.y,0);
下面上截图解释:
第一句的意思是获得屏幕上距离右边框100像素,然后和顶边齐平的点的世界坐标,无论第一句你传进去的是二维还是三维向量,返回的三维向量的z值都是和主摄像机在世界的z坐标相同的,所以在赋值或者初始化物体的时候要注意。
屏幕坐标的原点和世界坐标的原点是不同的。图中红色圈为屏幕坐标原点,蓝色为世界坐标原点。
也就是说虽然还是那个点,但是它的x是以世界坐标的单位为单位,表示位于蓝圈的世界坐标原点到右边灰色边框的距离
y则表示以世界坐标的单位为单位,位于蓝圈的世界坐标原点到顶部灰色边框的距离。所以赋值物体大小时候要稍微转换一下。如:
Vector3 tempPosition = Camera.main.ScreenToWorldPoint(new Vector2(Screen.width, Screen.height)); upWall.transform.position = new Vector3(0,tempPosition.y+0.5f); upWall.size = new Vector2(tempPosition.x * 2, 1);