【Unity】坐标系、Vector3基础和Transform位置

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

前言

在学习Vector3和Transform之前需要先了解一下Unity坐标系:

在Unity中有很多坐标系,诸如世界坐标系、局部坐标系、屏幕坐标系、视口坐标系等等,这些坐标系往往会给我带来很大的困扰,但又缺一不可。比如当你需要获取鼠标在世界坐标的位置时,你就需要明白什么是世界坐标和屏幕坐标,以及两者如何转换。

一、坐标系

参考视频:Unity的各种坐标系

1、分类

1)世界坐标

当你从Unity中新建了一个物体对象,它所具有的Transform参数所采用的就是世界坐标系,该坐标系分为左手坐标系和右手坐标系,其中如图所示。其中左手坐标系就是Unity中的世界坐标系,也就是Z轴为正,X轴为右,Y轴为上,而右手坐标系在数学中更加常用。

transform vector,Unity,C#,unity,游戏引擎,c#

Unity中一个物体的坐标信息,通过Transform.position来存储,它是一个Vector3变量,是一个三维向量,存储了XYZ的信息。

transform vector,Unity,C#,unity,游戏引擎,c#

在Unity中,可通过Transform.forward来表示正方向,Vector3.forward也可以表示正方向,这两者的区别在于:

Vector3.forward的值永远是(0,0,1),而transform.forward的值则是根据当前物体的自身坐标系Z轴,不一定等于(0,0,1) 怎么理解呢,举个例子:
首先一个物体的transform.position,一定是该物体在世界坐标的位置,相应的transform.localPosition才是该物体的局部坐标,那么transform += Vector3.forward时,就等于在向世界坐标的Z轴前进,而transform += transform.forward时,则等于再向局部坐标的Z轴前进。

2)屏幕坐标系

屏幕坐标系就是把屏幕看作一个坐标系,从左下角开始计算,也就是(0,0),而右上角则是(Screen.widht,Screen.height),所以又叫做像素坐标系。这里不管是视口坐标还是屏幕坐标,其z值还是有的,是表示深度的。

3)视口坐标系

该坐标系计算方式和屏幕坐标系类似,只不过把其参数标准化了,更加适用于比例计算。
左下角为(0,0) 右上角为(1,1)。这里不管是视口坐标还是屏幕坐标,其z值还是有的,是表示深度的。

4)GUI坐标系

该坐标是从左上角开始计算的,左上角(0,0),右下角为(Screen.width,Screen.height)。

2、坐标系的相互转换

1)世界坐标和屏幕坐标的相互转换
//屏幕坐标转世界坐标
Camera.ScreenToWorldPoint(Vector3 Pos);

//世界坐标转屏幕坐标
Camera.WorldToScreenPoint(Vector3 Pos);

这些转换一般应用于想要通过鼠标来操作世界物体,比如物体跟随鼠标移动… 

 2)世界坐标和视口坐标的相互转换
//世界坐标转视口坐标
Camera.WorldToViewportPoint(Vector3 Pos)

//视口坐标转世界坐标
Camera.ViewportToWorldPoint(Vector3 Pos);

这个原理和上一个差不多,因为屏幕和视口是可以相互转换的,所以把上面的转换函数换成下面的也是成立的,前提是最后用视口转世界坐标时,要把鼠标位置屏幕坐标先转成视口再使用。

 3)屏幕坐标和视口坐标的相互转换
//屏幕坐标转视口坐标
Camera.ScreenToViewportPoint(Vector3 Pos)

//视口坐标转屏幕坐标
Camera.ViewportToScreenPoint(Vector3 Pos);
 4)世界坐标和局部坐标的相互转换
//世界坐标转局部坐标
transform.InverseTransformPoint(Vector3 Pos);
transform.worldToLocalMatrix

//局部坐标转世界坐标
transform.TransformPoint(Vector3 Pos);
transform.localToworldMatrix

3、坐标系混淆

大家在使用坐标系的时候,可能听过很多很多别称,很容易对一些较为生僻的叫法产生疑惑,这里给大家梳理一下。

  • 世界坐标、全局坐标、左手坐标、绝对坐标
  • 局部坐标、自身坐标、物体坐标、本地坐标、相对坐标
  • 屏幕坐标、像素坐标
  • 视口坐标、视窗坐标
  • GUI坐标、UI坐标

二、Vector3基础

1、Vector3主要是用来表示三维坐标系中的一个点或者一个向量

申明:

Vector3 v = new Vector3();
v.x = 10;
v.y = 10;
v.z = 10;

只传xy,z默认为0

Vector3 v = new Vector3(10, 10);

2、基本运算及部分常用方法

Vector3 v1 = new Vector3(1, 1, 1);
Vector3 v12 = new Vector3(2, 2, 2,);

print(v1 + v12);
print(v1 - v12);
print(v1 * v12);
print(v1 / v12);

//常用
print(Vector3.zero);//000
print(Vector3.right);//100
print(Vector3.left);//-100

//常用的方法
print(Vector3.Distance(v1, v12));

transform vector,Unity,C#,unity,游戏引擎,c#

三、transform位置

1、两种相对位置

分为相对世界坐标系的position位置相对父对象的localPosition

//相对世界坐标
print(this.transform.position);

//相对父对象坐标
print(this.transform.localPosition);

如果你想以面板坐标为准来进行位置设置,那一定是通过localPosition来进行设置的。

当父对象在世界坐标系原点,或者对象没有父对象时,这二者是一样的。

2、修改位置

1)直接赋值

this.transform.position = new Vector3(99, this.transform.position.y, this.transform.position.z);

2)先取出来再赋值

虽然不能直接修改transform的xyz但是Vector3是可以直接修改xyz的,所以可以先取出来修改Vector3再重新赋值文章来源地址https://www.toymoban.com/news/detail-785982.html

Vector3 vPos = this.transform.localPosition;
vPos.x = 99;
this.transform.localPosition = vPos;

3、获取位置

//面朝向
print(this.transform.forward);

//头顶
print(this.transform.up);

//右手边
print(this.transform.right);

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

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

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

相关文章

  • Unity 坐标系

    常见的三维软件都采用笛卡尔坐标系,也就是常见的xyz轴坐标系。笛卡尔坐标系可以是左手坐标系也可以是右手坐标系,如下图所示  两种坐标系是镜像对称的。而Unity采用左手系,且xyz轴的默认方向与图中的左手系完全一样,分别对应右、上、前。 总结如下: x:右,(1,

    2024年02月07日
    浏览(49)
  • Unity学习——坐标系

      在Unity中所有物体都处于坐标系中,了解坐标系的基本内容十分有必要。这篇文章就简单介绍一下Unity中关于坐标系的相关内容   Unity中共包含四类坐标系:     1)世界坐标系(全局坐标系)     2)本地坐标系(局部坐标系)     3)屏幕坐标系     4)视

    2024年02月01日
    浏览(41)
  • Unity坐标系转换

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

    2024年02月07日
    浏览(60)
  • unity | 各种坐标系通俗讲解

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

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

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

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

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

    2024年01月19日
    浏览(38)
  • 相机基础(二)——坐标系转换

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

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

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

    2024年02月16日
    浏览(56)
  • unity和3d坐标系以及和ue的比较

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

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

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

    2023年04月17日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包