设为首页 - 加入收藏
广告 1000x90
您的当前位置:黄大仙78345救世报网 > 局部坐标系 > 正文

理解Unity3D中的四种坐标体系

来源:未知 编辑:admin 时间:2019-07-21

  刚开始接触 Unity3D 的时候,经常会被 Unity 中各种坐标系搞得昏头转向不知所措,毕竟是一个 3D 兼 2D 游戏开发殷勤,还要把 3D 作品最终发布到 2D 的桌面或者手机系统中,所以熟悉掌握 Unity3D 中的坐标系是非产重要的。

  其实如果仅仅只有 3D 坐标系还是很简单的,就目前来说我们所见过的三维建模软件或者游戏开发软件所用的坐标系分两种:左手坐标系和右手坐标系。怎么区别呢?大家看下图就知道了:

  区分坐标系可以按上图方法,这里我也有个简单的判断方法:用手握住 z 轴,大拇指朝向 z 轴正方向,然后用手的四指从 x 轴正方向握拳头,如果是左手 90 度就能把四指握到 y 轴就是左手坐标系,如果是右手 90 度握紧后到了 y 轴就是右手坐标系。

  除了 3D 世界中的坐标系,还有其他的几个坐标系也非常常用,比如我们经常要把世界三维坐标系转换成我们最终屏幕中的二维坐标系,或者把手机屏幕的二维坐标系转化成游戏世界中的三维坐标系等,各个坐标系各有特别,不能混用,为了更好的学习 Unity 游戏开发,自己在此总结一下 Unity 当中的坐标系和相关用法,以作备忘和学习。

  这四种坐标系可以说没有一个是完全相同的,各个坐标系所代表的意思也可以从字面含义中理解出来,它们之间都是可以相互转换的,不过 GUI 坐标体系除外,它比较特殊,也相对来说是最简单的,那么我们就从最简单的说起吧。

  我们在做 Unity 游戏开发的时候,经常会使用内置的 GUI 来做一些测试,比如显示一个按钮控制游戏,画一个文本显示相关信息等。它的代码全部控制在OnGUI()函数中:

  这个按钮Button所在的坐标系就是 GUI 绘制坐标系。大家稍微测试一下就知道了,它的原点(0, 0)在最左上角,因为屏幕宽度是Screen.width,高度是Screen.height,所以 GUI 体系右下角的坐标为:(Screen.width, Screen.height), 这是一个二维的坐标体系,坐标z的值都为 0 。大家可以看下图加深理解:

  当我们使用多个相机,在同一个场景中显示多个视口的时候,我们就需要用上视口坐标系了。

  视口坐标系对于场景的显示非常重要,对于新手来说我们经常使用一个相机就够了,但是当需要使用到多个视口的时候,我们就必须关注视口坐标体系了,大家可以在相机Camera的属性中看到Viewport Rect就是视口坐标系的设置:

  一个相机对应一个视口,视口预览( Camera Preview )展示了相机所看到的所有物体,很显然,它默认大小是(width = 1, height = 1),位置也是从 0 到 1 ,这个位置就是我们所讨论的坐标系:左下角为(0, 0),右上角是(1, 1),一般视口坐标系主要用在相机显示中,我们简单的进行Viewport Rect的设置就可以了。

  另外,新手朋友们可以记住这么一个快捷键:Ctrl + Shift + F,可以快速设置相机视口到当前场景窗口的视口位置。下图是视口坐标系和鼠标在屏幕上的坐标系的转换结果:

  嗯,非常重要!不管怎样,最终我们所有的成果都会发布到各个平台(屏幕)上,所以,任何坐标系的坐标和屏幕坐标系的转换都是非常重要的。比如我们经常需要处理鼠标的相关事件(鼠标位置、单击、双击事件等),或者手机上的触摸反馈,这些原始数据都是屏幕坐标系相关的。

  虽然重要,其实屏幕坐标系处理起来很简单直接,Input.mousePosition获取的就是鼠标在屏幕中的位置坐标。大家可以测试一下,屏幕坐标系中原点(0, 0)位于左下角,那么右上角必然就是(Screen.width, Screen.height),对了,还有一个z呢?都为 0 吗?答案是肯定的,既然是二维坐标系那么z肯定是 0 了,和 GUI 坐标系一样,但是话又说回来,屏幕坐标系转换成世界坐标系z还是 0 吗?其实不然,屏幕坐标转换成世界坐标后物体的z值是取决于相机的,因此:gameObject.z = camera.z,其实在上面视口坐标系介绍中的图中我已经把Mouse Point鼠标位置转换成世界坐标(World Point)了,大家应该注意到了吧。

  那么,除了坐标系的转换,还有什么值得注意的呢?这里我要告诉大家的是,我们在控制相机的时候,因为屏幕显示的就是相机所看到的内容,而屏幕的宽高比直接影响了相机的显示,也就是Aspect Ratio的值,大家可以在 Game 面板中轻松地设置Aspect宽高比,查看对游戏画面的影响:

  ,关于这个主题我会在我的下一篇文章中提到,大家可以关注我的博客。如何通过宽高比获取摄像机视口尺寸呢?首先可以从上图中知道宽高比的计算方法:)。这个在游戏场景中应用的还是比较多的,比如你有这么个需求:两个玩家移动对战,你的相机要把两个移动的玩家随时放置在屏幕显示中。

  最后,世界坐标系!世界坐标系不是最简单的,但却是我们最常用的坐标系。记住一点,任何情况下:transform.position都是返回物体的世界坐标值,及时你所使用的是子物体!另外,从上面所讲的屏幕坐标系转换成世界坐标系也是非常简单的,它以当前相机为参考:

  另一方面,我们在游戏开发过程中,经常要处理子物体的相对transform值,这个时候我们就需要稍微动点脑子了,当然如何转变 Unity 已经帮我们预制好相应的函数方法了,你只要把父物体当做世界,子物体当做世界中的物体,使用这些函数,换一下坐标就和处理绝对坐标一样了,不知道大家理解没有。我举个例子,我们在游戏开发中会遇到这种情况,你的相机如果直接放到世界中那么必然会需要调整它的旋转角度才能达到满意的视口位置,如何不让相机产生任何旋转就能把世界中的游戏物体放到合适的视口位置呢?

  办法就是:我们把相机放到一个产生了合适旋转角度的父物体当中!这样做的效果就是:相机就相当于子物体,父物体旋转了,子物体就不需要额外旋转了,这时候相机的局部旋转就为 0。这在有些场景中使用起来很方便,相机已经是父物体世界中的子物体了。

  当然,在使用坐标系过程中我们还要关注其他方方面面,比如欧拉角的旋转,万向锁,平滑过渡视野等等,这些我想我会在后面的文章总结中写道吧。这次就总结介绍了这几个坐标系,看上去有点复杂,总体来说还是挺很好理解的,有什么不对的或者可以加强的请给我留言,谢谢!

  参考一、基础1、什么是坐标系坐标系的定义是:对于一个n维系统,能够使每一个点和一组(n个)标量构成一一对应的系统。在这篇博客中,我们讨论的特指欧几里德三维空间中的坐标系。对于这样的三维空间,最常见的坐...博文来自:ronintao的专栏

  Unity分为世界坐标和局部坐标。局部坐标是相对于父亲来说的,而世界坐标是对于整个游戏来说的。绝对坐标:PickUps的坐标为世界坐标(绝对坐标)相对坐标:每一个PickUp都有一个坐标,这个坐标就是...博文来自:Unity 学习之路

  Unity有世界坐标、本地坐标(localposition)、UI坐标(这个我好像还没怎么用)、屏幕坐标等等,之前的一个项目需要考虑世界坐标转换为本地坐标,后来经过一番尝试,找到了一种比较取巧的方法。...博文来自:li727507857的博客

  今天博主想和大家聊聊unity3D中各种坐标系。自从Unity4.6版本推出uGUI后,unity3d坐标系的大家庭中便增加了RectTransform这个新成员,如果你不想被各种坐标系搞得晕头转向的...博文来自:KingSea_168的专栏

  今天感触良多,故于此一记。首先,对于世界坐标和局部坐标。这是两个cube,是我们今天的主角。首先是这个父Cube,我们注意到它此时坐标为(0,0,0),由于他在根目录,所以他的transform.po...博文来自:设计师养成记

  经常被Unity中各种坐标在转换搞晕同时坐标系的转换十分重要。所以做个笔记整理一下以作备忘学习。目录1.Unity中有四种坐标1.世界坐标(WorldSpace)2.屏幕坐标(ScreenSpace)...博文来自:LLLLL__的博客

  转载一篇坐标系讲解得非常详细的文章,网上分散在各处的坐标系知识大部分有提到...博文来自:希望成长得更快一点

  介绍unity总共有四种坐标:1,鼠标所在的屏幕坐标,只包含x,y值,数据类型是vector22,ui坐标,在canvas中的ui坐标。数据类型是vector33,世界坐标,三维世界坐标数据类型是ve...博文来自:冷幽默的博客

  无论是在Unity当中还是在图形学当中都离不开矩阵的转换。下面先来讲解下主要的坐标系首先是世界坐标系:这个比较好理解,就是一个物体所在空间中的位置信息,反应了物体在空间当中的绝对位置。本地坐标系:表示...博文来自:weixin_36504157的博客

  本文介绍了Unity中的几种常用坐标系以及坐标系之间的转换方法,并在文末附上一个展示各种坐标系数据的Demo。1.世界(局部)坐标系以世界原点为坐标原点建立的三维坐标系,获得GameObject世界坐...博文来自:Hungers Blog

  3D坐标-3D坐标比如现在需要在一个用3D摄像机渲染的物体(用A表示)的相对坐标为(10,-5,91)的地方放置一个物体(用B表示),则B的世界坐标为Vector3screenPos=Camera....博文来自:linxinfa的专栏

  3D坐标系是3D游戏开发的基础概念。一般3D软件都是采用笛卡尔坐标系来描述物体的坐标信息。笛卡尔坐标系分为左手坐标系和右手坐标系:左手坐标系是Y轴指向上方,X轴指向右方,Z轴指向前方。右手坐标系是Y轴...博文来自:biezhihua的专栏

  一 World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。1.代码获取的transform...博文来自:dk_0520的博客

  一 World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。1.代码获取的transform...博文来自:不知道干嘛的

  Unity3D由于是在三维世界中编程,而最终的结果是需要反馈到肉眼所示的2D屏幕之上的。这就产生了一种比较需要考虑的问题,尤其在一些涉及屏幕与Unity3D的3D世界交互的情况。网络上对于这方面的文字...博文来自:编程记录,亲测有效

  在谈unity各种坐标系之前,我一直很好奇unity为什么要有这么多坐标系搞的很麻烦,其实unity这么坐标系是为了解决麻烦,试想计算你和你同桌的位置,要先得到你们各自在世界中的位置,然后在计算相对位...博文来自:bouquet12138的博客

  一.左手坐标系和右手坐标系1.左手坐标系:伸开我们的左手,掌心向外,大拇指与食指成90度,中指、无名指和小指弯曲,大拇指指向的方向就是X轴正方向,食指指向的方向就是Y轴正方向,中指、无名指和小指指向的...博文来自:aihiao的专栏

  世界坐标系场景中的绝对坐标系,场景上所有物体都是以该坐标系的原点来确定各自位置的。世界坐标即物体在世界坐标系中的位置。局部坐标系以物体的世界坐标为原点,角度为朝向,大小为单位,所产生一个新的坐标系,该...博文来自:NCZ9_

  Unity作为一个3D开发引擎,他的各系坐标系错综复杂,学过矩阵的朋友可能还绕得开,没有学会的一不小心就掉进坐标坑里面了,其实各系坐标的区别在于所建立的坐标系参照不同,下面先了解下各大坐标吧,我尽量说...博文来自:小柯的博客

  了解坐标系的特点是我们首要任务:笛卡尔坐标系(Cartesiancoordinates)(法语:lescoordonnéescartésiennes)就是直角坐标系和斜坐标系的统称(特点是不同的坐标系...博文来自:wy小骑士

  坐标系,是一位叫笛卡尔的人提出的。而后面提及的左手坐标系和右手坐标系中,在数学定义上,便使用了向量的一种运算,这种运算也是以笛卡尔命名,叫笛卡尔积。在Unity3D中,坐标系至少存在如下三种:世界坐标...博文来自:laiyizhou的专栏

  很多时候,我们都需要屏幕坐标与世界空间坐标进行转换,比如鼠标的实时位置映射到世界坐标。那很多人就说了,不就是直接用Camera.main.ScreenToWorldPoint()方法就好了吗。嗯,没错...博文来自:oscarwsd的博客

  (世界坐标):我们在场景中添加物体(如:Cube)...博文来自:我用CV我自豪。

  点击这个按钮后,就可以使用模型自身的轴心了,但是这个设置是应用于全部模型的。...博文来自:赖张殷-Eagle

  WorldSpace(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。            ScreenS...博文来自:痞子龙3D编程

  原文地址:Unity中的旋转参考1、关于万向节死锁2、【Unity技巧】四元数(Quaternion)和旋转一、Unity中的Rotation    在unity中,旋转的表示的常用方法之一,是一个三...博文来自:coffeecato的个人博客

  以前都是做2D游戏,基本不关注数学方面的知识。现在学习unity了,很多概念都不懂。学生时代的东西,早还给老师了。当然我学习不好==!所以现在来补补。毕竟现在要做3D了。基础的东西还是得懂。下面是...博文来自:德玛西亚的专栏

  自从Unity4.6版本推出uGUI后,unity3d坐标系的大家庭中便增加了RectTransform这个新成员,如果你不想被各种坐标系搞得晕头转向的话,那么请随我一起来梳理下Unity3D中各种各...博文来自:紫晓慕瑞的博客

  unityrecttransform和transform有什么区别前言需要在代码中调整改变UI控件的属性,比如位置、大小等,然...博文来自:taikongyi的专栏

  使用Unity3DScreenToWorldPoint(Vector3position)时,如果将z坐标设置为零的话,那么转换的结果可能是出错,会变成摄像机的位置,所以想让结果正确要将position...博文来自:阳仔博客

  Windows中的几种坐标体系1、屏幕坐标屏幕坐标描述物理设备(显示器、打印机等)的一种坐标体系,坐标原点在屏幕的左上角,X轴向右为正,Y轴向下为正。度量单位是象素。原点、坐标轴方向、度量单位都是不能...博文来自:lcwdzl的专栏

  摘要:各种坐标体系之间如何转换?到底有哪些坐标体系?什么是火星坐标?为什么我的坐标,在地图上显示会有偏移?本文详细解答以上问题。最后给出坐标拾取工具。原文地址:博文来自:的博客

  摘要:各种坐标体系之间如何转换?到底有哪些坐标体系?什么是火星坐标?为什么我的坐标,在地图上显示会有偏移?本文详细解答以上问题。最后给出坐标拾取工具。-------------------------...博文来自:南宫的专栏

  unity中提供了获取对象的三种方法:通过对象名称(Find)博文来自:Never give up~

  旧人旧梦旧时光下面说一下屏幕坐标系在Unity中,Transform组件的Transform.TransformPoint方法可以将坐标点从局部坐标系转换到全局坐标系。ers...博文来自:没有什么大不了

  UGUI实现伤害数值显示的原理是在人物头顶放置空物体,然后将下面的脚本挂在空物体上,将该空物体制作为预制体;lections;publi...博文来自:一入編程深似海,从此BUG日日改!

  我在上篇博客写出了如何用代码创建一个我们可以任意控制顶点得圆柱体。本片博客着重记录如何在空间创建类似unity可以控制物体的坐标轴。由于我们要控制圆柱体的长度,所以我们设计的坐标轴是两个方块在圆柱体的...博文来自:Jay W的博客

  网上有很多叙述关于3DsMax制作的模型导入到Unity3D时如何进行坐标轴处理的方法,大部分只告诉你该如何做,至于为什么也没写。有的解释了,但是解释的完全是错误的。由于我之前解析过FBX文件,所以对...博文来自:张Da夫

  对于三维模型,有两个最重要的坐标系统,一是顶点的位置(X,Y,Z)坐标,另一个就是UV坐标。什么是UV?简单的说,就是贴图影射到模型表面的依据。完整的说,其实应该是UVW(因为XYZ已经用过了,所以另...博文来自:WUYIDUER的博客

  wrs120:好文。用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。

  :IsNullOrEmpty(),Contains()这两个方法好像不是c++中的吧,一直编译不通过,是c#还是哪里的

本文链接:http://sesdagreat.com/jubuzuobiaoxi/397.html

相关推荐:

网友评论:

栏目分类

现金彩票 联系QQ:24498872301 邮箱:24498872301@qq.com

Copyright © 2002-2011 DEDECMS. 现金彩票 版权所有 Power by DedeCms

Top