Unity学习笔记(五)之坐标系

一、 World Space(世界坐标)

我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。

  1. 代码获取的transform.position都是一致的无论是3d还是2d,ugui/ngui,父子关系,transform.position都是以场景中心(0,0)的位置开始计算,单位长度也都是一样的。无论怎样的UI,怎样的层级关系,代码里输出Debug.log(go.transform.position),输出的总是相对于场景中心(0,0)的距离,也是获取世界坐标的方法。

x轴:左负右正
y轴:上正下负
z轴:里正外负

  1. 检视面板的position数值和代码获取的position数值不一致,ngui和ugui的Transform和Recttransform的position显示的数值和代码里获取transform.position不一致。

ugui btn代码位置position=new Vector(1,0,0),面板显示(31.3,0,0)
ngui btn代码位置position=new Vector(1,0,0),面板显示(371,0,0)
具体比例不是很清楚,可能和测试环境有关。

  1. 父子关系的容器,检视面板position和代码获取position不一致,cube和ngui/ugui的子对象的Transform/Recttansform在检视面板中显示的Position数值是相对于父容器的,但是代码里获取的Transform/RectTransfrom的position是相对于场景中心的。

获取世界坐标:go.transform.position
获取本地坐标:go.tranfrom.localPosition (cube/ngui/ugui,无论层级关系,都是获取的是检视面板中的坐标)
可推断ugui/ngui都是在场景中的一个容器之中,所以检视面板显示的都是相对于父容器的坐标,而不是世界坐标。

二、Screen Space(屏幕坐标)

Screen Space是以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。
鼠标位置Input.mousePosition获取的是屏幕坐标。例如场景分辨率1024x768,如果屏幕被缩小至100x100,那么点击右上角是100x100,而不是分辨率的1024x768。

三、ViewPort Space(视口坐标)

视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。

四、绘制GUI界面的坐标系

这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。

Other、坐标转换

世界坐标 -> 本地坐标:貌似不用转,直接可以position和localPosition获取。
本地坐标 -> 世界坐标:
世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标。其中camera为场景中的camera对象。
屏幕坐标→视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标。其中camera为场景中的camera对象。
视口坐标→屏幕坐标:camera.ViewportToScreenPoint();
视口坐标→世界坐标:camera.ViewportToWorldPoint();

父子对象关系:
SetParent(Transform parent, bool worldPositionStays);
false:不保留世界坐标。改变层级关系后,坐标数值不变,位置变化,会相对于父对象移动。
true(默认):世界坐标不变。改变层级关系后,不会移动。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Unity3D中有哪些坐标系? 坐标系这个概念最早是由法国数学家笛卡尔提出的,并由此创造了用代数方法来研究几何...
    OneMore2018阅读 4,627评论 0 7
  • 无论是2d还是3d游戏开发,图形学都是基础,解析几何的基本思想是将几何图形抽象成点的运动轨迹,从而点可以作为组成图...
    tmgg阅读 12,928评论 2 4
  • 该系列笔记基于Unity3D 5.x的版本学习,部分API使用和4.x不一致。 目前在Unity3D中,除了新的U...
    某人在阅读 2,447评论 0 2
  • 3D坐标系是在做3D项目开发中的基础概念,一般来说3D软件或者开发工具都是采用笛卡尔坐标系来描述物体的坐标信息。笛...
    S_H_C阅读 6,476评论 0 6
  • 一 、世界坐标系--全局坐标系: 用来描述游戏场景内所有物体位置和方向的基准,也称为世界坐标系。Unity场景中创...
    _凉笙阅读 5,298评论 0 4