【Unity基础概念--坐标系】

这篇具有很好参考价值的文章主要介绍了【Unity基础概念--坐标系】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

对于我这个Unity初学者来说,在学习过一段时间的Unity相关知识后,对于Unity中坐标系的概念不是很明确清楚,是时候做一下坐标系相关知识的总结了。

【Unity基础概念--坐标系】,Unity,unity,游戏引擎

1、世界坐标系

世界坐标是按照笛卡尔坐标系定义出来的绝对坐标系,下面的各种坐标系都建立在世界坐标的基础上。我们知道二维平面内任意一个点可以用二维坐标(x,y)来表示,如果将这个概念延伸到三维空间内,那么三维空间内任意一个点都可以用三维坐标(x,y,z)来表示。Unity3D采用的是左手坐标系。在Unity3D中我们可以使用transform.position来获取场景中一个物体的世界坐标,通常情况下编辑器中的Inspector窗口是以世界坐标来描述一个3D物体的位置的,除非当一个3D物体存在父物体的时候,它会以相对坐标来描述其位置。

注意:
1、在Unity中,可通过Transform.forward来表示正方向,Vector3.forward也可以表示正方向,这两者的区别在于:
Vector3.forward的值永远是(0,0,1),而transform.forward的值则是根据当前物体的自身坐标系Z轴,不一定等于(0,0,1) 怎么理解呢,举个例子,首先一个物体的transform.position,一定是该物体在世界坐标的位置,相应的transform.localPosition才是该物体的局部坐标,那么transform.position += Vector3.forward时,就等于在向世界坐标的Z轴前进,而transform.position += transform.forward时,则等于再向局部坐标的Z轴前进。
2、在改变有父物体的子物体的坐标时,要是想改变的是局部坐标就要使用localPosition,如果使用position 则会认为修改的是世界坐标,而子物体的相对坐标会根据父物体的坐标和子物体position 自动转化的。

transform.position += Vector3.forward;
transform.position += transform.forward;

GameObject go  = GameObject.Instantiate(onePrefab);
go.transform.parent = oneTransform;
go.transform.localPosition = Vector3.zero;

2、屏幕坐标系

屏幕坐标是以像素来定义的,它的范围是以左下角为(0,0),右上角为(Screen.width,Screen.height)定义的这样一个矩形。屏幕坐标是一个3D坐标,Z轴是以相机的世界单位来衡量的。屏幕坐标和相机之间满足:Screen.width=Camera.pixelWidth和Screen.height=Camera.pixelHeight这两个条件。例如我们将相机正对着场景中的原点(0,0,0),相机的Z轴分量为-10,按照屏幕坐标的定义,假设屏幕为800X640的大小,则此时原点转化为屏幕坐标后应该是(400,320,10)。在Unity3D中我们可以使用WorldToScreenPoint来将一个世界坐标转换为屏幕坐标。鼠标位置Input.mousePosition获取的是屏幕坐标。
例如场景分辨率1024x768,如果屏幕被缩小至100x100,那么点击右上角是100x100,而不是分辨率的1024x768。

现在运行下面这行代码就是得出我当前游戏视窗的屏幕分辨率。

    void Start()
    {
        Debug.Log("当前窗口的分辨率为:" + Screen.width + "X" + Screen.height);
        Debug.Log("当前屏幕的分辨率为:" + Screen.currentResolution);
    }

3、视口坐标系

视口坐标是标准化后的屏幕坐标。标准化的概念我们可以引申到向量的标准化中,比如一个向量(x,y)将过标准化后可以得到一个单位向量(x’,y’)。类似地,视口坐标是以0到1间的数字来表示的,它的范围是以左下角为(0,0),右上角为(1,1)定义的这样一个矩形。视口坐标是一个3D坐标,Z轴是以相机的世界单位来衡量的。通过对比可以发现视口坐标和屏幕坐标特别的相似,所以这里大家可以对比着来学习。同样以屏幕坐标中的例子来将这里的转换,例如我们将相机正对着场景中的原点(0,0,0),相机的Z轴分量为-10,按照屏幕坐标的定义,假设屏幕为800X640的大小,则此时原点转化为视口坐标后应该是(0.5,0.5,10)。在Unity3D中我们可以使用WorldToViewportPoint来将一个世界坐标转换为视口坐标。

4、GUI坐标系

该坐标是从左上角开始计算的,左上角(0,0),右下角为(Screen.width,Screen.height);文章来源地址https://www.toymoban.com/news/detail-793929.html

屏幕坐标系和世界坐标系转换函数:
Camera.ScreenToWorldPoint(Vector3 position); // 屏幕坐标系转换为世界坐标系
Camera.WorldToScreenPoint(Vector3 postion); // 世界坐标系转换为屏幕坐标系

屏幕坐标系和视口坐标系转换函数
Camera.ScreenToViewportPoint(Vector3 position); // 屏幕坐标系转换成视口坐标系
Camera.ViewportToScreenPoint(Vector3 position); // 视口坐标系转换成屏幕坐标系

世界坐标系和视口坐标系转换函数
Camera.WorldToViewportPoint(Vector3 position); // 世界坐标系转换成视口坐标系
Camera.ViewportToWorldPoint(Vector3 position); // 视口坐标系转换成世界坐标系

到了这里,关于【Unity基础概念--坐标系】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity坐标系转换

    坐标系的转换 世界坐标系和本地坐标系的相互转换函数如下。 ● Transform.TransformPoint(Vector3position):将一个坐标点从本地坐标系转换到世界坐标系。 ● Transform.InverseTransformPoint(Vector3position):将一个坐标点从世界坐标系转换到本地坐标系。 ● Transform.TransformDirection(Vec

    2024年02月07日
    浏览(58)
  • Unity坐标系的转换—世界坐标转为UI坐标

    直接调用WorldToAnchorPos,传入对应的参数返回UGUI坐标

    2024年04月13日
    浏览(42)
  • unity | 各种坐标系通俗讲解

    一、三维坐标 三维坐标:x,y,z都有数值 unity里面只有一个三维坐标,就是世界坐标 ,unity里面相当于一个小的世界,在这里面物体的坐标叫做世界坐标。 但是每个物体都有两个世界坐标,一个是真的世界坐标,一个是相对于父物体的世界坐标,代码如下 也就是只要是这两个

    2024年02月01日
    浏览(34)
  • Unity入门日记——父子坐标系

    Unity中设置父子关系后,子对象坐标转化为相对坐标;   设图中cube为父对象,sphere为子对象,未设置父子关系时,相对于世界坐标系的各自坐标如下:    将sphere设为cube子对象,坐标变化: 相对世界坐标系的子对象坐标与父对象坐标之差,乘以父对象坐标系归一化尺度;

    2024年02月11日
    浏览(51)
  • UE和Unity坐标系转换

    内容将会持续更新,有错误的地方欢迎指正,谢谢!   UE和Unity坐标系转换       TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取! 助力快速掌握 UE和Unity 坐标系转换 为初学者节省宝贵的学习时间,避免

    2024年01月19日
    浏览(37)
  • unity和3d坐标系以及和ue的比较

    unity和ue都采用左手坐标系 在3d软件中,大多数软件都用红色代表x轴,绿色代表y轴,蓝色代表z轴。 不同的是 : 在unity中X轴代表右方,Y轴代表上方,Z轴代表前方; 在ue中X轴代表前方,Y轴代表右方,Z轴代表上方; 缩放 :根据自身缩放,不受坐标系影响, (移动和旋转则分

    2024年02月11日
    浏览(38)
  • Unity开发3 坐标系及工具、快捷键操作

    左手坐标系:X→ Y↑ Z朝向屏幕内部 右手坐标系:X→ Y↑ Z朝向屏幕外部 Unity使用的是左手坐标系 世界坐标系就像经纬度一样,游戏对象的“位置”即相对于世界坐标系。 世界坐标系原点为(0,0,0)。 可将一游戏对象拖拽至另一游戏对象下生成父子关系。 生成父子关系后,

    2023年04月17日
    浏览(42)
  • Unity坐标系、相互转换和相对自身的方位及角度。

    一、Unity的4种坐标系 1, World Space(世界坐标): 我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。 2, Screen Space(屏幕坐标): 以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机

    2024年02月10日
    浏览(36)
  • 相机基础(二)——坐标系转换

    物体之间的坐标系变换都可以表示坐标系的旋转变换加上平移变换,则世界坐标系到相机坐标系的转换关系也是如此。绕着不同的轴旋转不同的角度得到不同的旋转矩阵。如下: 那么世界坐标系到相机坐标系的变换如下: 从相机坐标系到图像坐标系,属于透视投影关系,从

    2024年02月11日
    浏览(53)
  • 坐标系基础相关知识:右手定则

    如果坐标系的原点在右手掌,拇指向上延伸的方向对应于某个坐标轴的方向,则可以利用常规的右手定则确定其他坐标轴的方向。例如,在下图中,假设拇指指向Z轴的正方向,食指伸直的方向对应于X轴的正方向,中指向外延伸的方向则为Y轴的正方向。 当拇指伸直并且与给定

    2024年02月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包