您的位置:首页 > 移动开发 > Unity3D

Unity设置物体与屏幕成一定关系

2016-09-21 20:49 741 查看
我们做手游很多时候要考虑到屏幕适配的问题,比如有些屏幕很长,有些屏幕相对较短。

当我们的一些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);
这句话的结果是upWall的底边恰好挨着上图灰色顶边,然后高度为1 ,长度为上图顶边的长度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  摄像机 像素 转换