unity 获取物体坐标怎样正确获取2d世界坐标

Unity 2D世界坐标和逻辑坐标1:1对应,世界坐标与逻辑坐标对齐
我们都知道,最初是作为3d游戏引擎而设计的,在4.3版本后才推出的UGUI和Sprite来实现2d游戏设计。在UGUI中使用的屏幕坐标系(以像素单位),但是在中依然使用的是3d坐标系中的(Unit浮点单位),在导入Texture2d时可以做像素到单位(unit)的转换设置。而世界坐标系坐标原点是屏幕中心点,照成了实际开发中大量的世界坐标到屏幕坐标的转换操作。这也是我写这篇文章的初衷,因为这个问题一直困扰着我,有时候都有了抓狂的赶脚。
还有一个问题Unity系统使用中心点作为默认坐标系的原点,这样在逻辑坐标(以地图为参照物)中物体移动时,无形中增加了转换的难度。对于本人来说,最理想的方式是采用我们习惯使用Window坐标体系,至少完成世界坐标、屏幕坐标及逻辑坐标(游戏地图)的原点对齐以及世界坐标单位和屏幕坐标单位像素1:1对应,文字总是很晦涩,我们还是使用几张图片来说明问题吧!
转载请注明出处,蛮牛专栏作家地址 /forum-47-440-1.html
传统windows的坐标系,左上角坐标原点,x轴正方向向右,y轴正方向向下
Unity中的坐标系,也就是世界坐标,原点是屏幕中心点,方向是x轴正方向向右,y轴正方向向上
默认情况下,世界坐标和屏幕坐以屏幕中心为坐标系原点。导入的纹理图片默认也以图片中心点为原点,而不是我们习惯的左上角或者左下角逻辑原点。举个例子,很直观的就是在左下角区域,以中心点作为坐标原点,这个区域就是负值。这就和我们熟知的逻辑坐标有了一个差值,我们在做逻辑坐标与世界坐标或者屏幕坐标转换的时候,就需要考虑这个差值。
我们知道屏幕显示的大小是由摄像机的尺寸和分辨率来决定的,其中 摄像机的尺寸,是由属性面板中的size属性来确定,实际上它的值是可视区域的高度的一半而单位是unit。很多屏幕自适应程序的教程,也是应用这个原理来设计,这方面的文章和帖子已经很多了,我就不详细阐述了,感兴趣的朋友可以参照以下两篇文章,
一种Unity2D多分辨率屏幕适配方案 /flyFreeZn/p/4073655.html
UGUI研究院之开始学习搭建界面自适应屏幕(一) /archives/3278
我们要实现的最终效果,其实很简单平移下unity的世界坐标就可以了,具体的操作其实是平移相机,如下图所示,
实际上要实现世界坐标和逻辑坐标的一一对应,我们只需要通过两个步骤,
一,世界坐标、屏幕坐标、逻辑坐标的单位统一;
二,设置世界坐标和逻辑坐标的原点相同(也就是(0,0)点相同)。
首先我们设置纹理也就是,图片Size单位,默认值是每100像素为一个单位,也就是在Unity3d中100个像素,对应一个Unity3d 的Unit单位,我们将这个值修改为,每一像素对应一单位,具体如下图所示,
设置完成后我们导入工程中的图片或者叫做纹理,就是以像素为单位的,简单的说,也就是如果一个300×400像素的图片,它的宽和高也就是300×400单位(unit)了。
接下来我们设置合理的摄像机尺寸,按照前参考文章中提到的屏幕自适应技术,我们选择一个固定的像素尺寸,这里我选择800×600。由于前面我已经将所有导入工程中的图片单位设置为一像素对应一单位(Unity),这样我们设置摄像机的尺寸Size,必须将该值设置为可视区域分辨率高的一半,也就是300单位,至此,我们完成了第一项关于世界坐标系和逻辑坐标系的单位统一。
我们知道默认的世界坐标系和屏幕坐标系是以屏幕的中心为坐标系原点了的,逻辑坐标原点也采用图片的中心点作为原点这不太符合2d程序开发的习惯,这里需要统一下坐标原点,Unity3d世界坐标系,x轴 和y轴的方向分别是向右向上,可以假象屏幕的左下角为原点(而传统的Windos GUI,x轴和y轴的方向是向右向下,假象屏幕的左上角点,)首先我们设置导入工程中的所有2d纹理的,坐标点或者叫中心点,置为左下角(BottomLeft)点,接下来我们,做一下相机的平移,我们将相机像左平移四百单位,向上平移三百单位,这样就完成啦世界坐标和逻辑坐标的原点统一,具体看下面两张图比较清楚。
第一步,将2d纹理的中心点设置在左下角点看到的现象
第二步,平移相机实现世界坐标和逻辑坐标(屏幕坐标)的重合
相机的设置
本篇是Unity3d坐标系系统的综合应用,同时也是一块试金石,考验你是否真正掌握了Unity3d坐标系系统,不知道你怎么样?反正我是学会了。
蛮牛社区()分享最新的游戏研发和虚拟现实相关技术内容。
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点后使用快捷导航没有帐号?
只需一步,快速开始
&加载中...
查看: 5048|回复: 1
unity3d的世界坐标转化成屏幕坐标
TA的其他好贴
马上注册,加入CGJOY,让你轻松玩转CGJOY。
才可以下载或查看,没有帐号?
使用函数:Camera.WorldToScreenPoint
原型:function WorldToScreenPoint (position : Vector3) : Vector3
返回值:Vector3 中 x,y是屏幕中的位置,z是坐标到摄像机的距离 屏幕左下方是(0,0);右上方是(pixelWidth,pixelHeight)
[java] view plaincopyprint?
01.var target : T&&
02.function Update ()&&
04.var screenPos = camera.WorldToScreenPoint (target.position);&&
05.print (&target is & + screenPos.x + & pixels from the left&);&&
如何让别人关注你?
没这么简单 虽然官方手册是这么说的 但是Y轴不好调,还有最好使用Camera.main
本楼回复(<span id="dp_count_)
如何让别人关注你?
Powered byUnity世界坐标与屏幕坐标之间如何转换 - CSDN博客
Unity世界坐标与屏幕坐标之间如何转换
先获取鼠标的坐标,然后移动模型,也就是模型跟随鼠标。怎么实现?
Vector3 screenPos = Camera.main.WorldToScreenPoint(transform.position); // 目的获取z,在Start方法
Vector3 mousePos = Input.mouseP
mousePos.z = screenPos.z; // 这个很关键
Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos);
this.transform.position = worldP
原文地址:/question/20219
本文已收录于以下专栏:
相关文章推荐
There are two problems here. The first one is that you need a &#39;new&#39; in front of your Vector3() in C#...
转载自:http://blog.csdn.net/itolfn/article/details/
unity最常用的几种坐标,屏幕坐标,世界坐标,ngui坐标,相对于父物体的...
UGUI坐标转为世界坐标
Vector3 scr = RectTransformUtility.WorldToScreenPoint (canvas.worldCamera, o...
1、获取主摄像机的位置:
private Vector3 _screenV;
_screenV = _camera.WorldToScreenPoint (cube.transform.positi...
keep study very day!写写今天的学习收获,今天学习到了平面坐标跟世界坐标的相互转换。
效果:点击鼠标中键,创建一个小球,虽然看起来是屏面的,但实则是在三维空间里面创建的哦!
keey study very day!写写今天的学习收获,今天学习到了平面坐标跟世界坐标的相互转换。
效果:点击鼠标中键,创建一个小球,虽然看起来是屏面的,但实则是在三维空间里面创建的哦,然后我就乱...
public&#160;Camera&#160;
&#160;&#160;&#160;&#160;Ray&#160;
&#160;&#160;&#160;&#160;RaycastHit&#160;hitI
&#160;&#160;&#160;&#160;Vector3...
基本语法:public Vector3ScreenToWorldPoint(Vector3 position);
其中参数position为屏幕参考点。
功能说明:此方法的作用是将参考点posit...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 unity3d 获取世界坐标 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信