关于Unity中RectTransform与transform的区别

以前一直以为在Inspector面板上的是Transform,后来才发现原来2D是RectTransform,3D是Transform

3D面板上显示的是位置坐标组件Transform,2D面板上显示的是位置坐标组件RectTransform

RectTransform是Transform的子类

可以这样强制转换,反过来则不行

gameObject.GetComponent<RectTransform>().anchoredPosition3D = new Vector3(x,y,z);

”锚点“在”父物体“中的位置和样式,取值范围为0(父物体左下) - 1(父物体右上)。
当值的最大和最小不相同的时候表示一个区间,这时锚点会散开,锚点的一边在最小值上,锚点的一边在最大值上,都一样的时候就会如上图在一个点上
特性: 决定当父物体改变的时候子物体的位置和 大小

RectTransform是继承transform的,它是针对unity中ui的,具体在表现上可以这样看待,凡是在在canvas组件下或者具有canvas组件的2d对象,他都recttransform组件,那些在3d空间下没有不受canvas控制的对象都是transfrom组件。
关于recttransform的坐标设置,我们在设置ui对象的坐标的时候设置的都是recttransform的坐标,他是相对于自身锚点的,和父对象的中心点没有关系应该这样设置。

RectTransform组件还有一个anchoredPosition字段,它是忽略z坐标的,一般使用anchoredPosition3D 进行设置
我们通常也会这样设置ui的坐标

gameObject.transform.localPosition = new Vector3(x,y,z)

但其实这样是不准确的,它的位置是相对于父节点的中心点的,只有在特殊条件下才会正确,就是在父节点的中心点和子节点的锚点是重合的情况下才是正确的。

可以看到属性面板中anchors的min和max相等的时候,也就是锚点是一个点的时候属性面板中设置坐标是Posx posy, posz。如果锚点不是重合的情况下

此时,他的属性面板是这样的

变成了left,top,posZ,right,bottom
分别代表距离左上右下和z轴的距离。

是用来计算坐标的,即表示,自己点的哪个位置相对锚点的坐标
总结:

gameobject.transform.localposition =

这种方式是子节点的中心点piovt相对于父节点的中心点poivt的对标

Vector3 vector3 = gameObject.GetComponent<RectTransform>().anchoredPosition3D=

这钟是子节点的中心点相对自身的锚点的坐标和父节点没有关系

到此这篇关于Unity中RectTransform与transform的区别的文章就介绍到这了,更多相关Unity RectTransform与transform 区别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于Unity中RectTransform与transform的区别

    以前一直以为在Inspector面板上的是Transform,后来才发现原来2D是RectTransform,3D是Transform 3D面板上显示的是位置坐标组件Transform,2D面板上显示的是位置坐标组件RectTransform RectTransform是Transform的子类 可以这样强制转换,反过来则不行 gameObject.GetComponent<RectTransform>().anchoredPosition3D = new Vector3(x,y,z); ”锚

  • pandas中apply和transform方法的性能比较及区别介绍

    1. apply与transform 首先讲一下apply() 与transform()的相同点与不同点 相同点: 都能针对dataframe完成特征的计算,并且常常与groupby()方法一起使用. 不同点: apply()里面可以跟自定义的函数,包括简单的求和函数以及复杂的特征间的差值函数等(注:apply不能直接使用agg()方法 / transform()中的python内置函数,例如sum.max.min.'count'等方法) transform() 里面不能跟自定义的特征交互函数,

  • 在Unity中实现简单的伪时间同步

    在Unity中实现简单的伪时间同步,只是读取数据库所在电脑的当前时间 复制代码 代码如下: using UnityEngine; using System.Collections; using System.Runtime.InteropServices; using System.Data; using System.Data.SqlClient; public class ChangeTime {     //Kernel32.dll在32位系统和64位系统有区别,64位系统中需要设置为以管

  • Unity中的静态批处理和动态批处理操作

    前言 Unity在运行时可以将一些物体进行合并,从而用一个绘制调用来渲染他们.这一操作,我们称之为"批处理",能得到越好的渲染性能. Unity中内建的批处理机制所达到的效果要明显强于使用几何建模工具的批处理效果,因为,Unity引擎的批处理操作是在物体的可视裁剪操作之后进行的,处理的几何信息少很多. 材质 只有拥有相同材质的物体才可以进行批处理,因此,你需在程序中尽可能多地复用材质.如果你的两个材质仅仅是纹理不同,那么你可通过纹理拼合来将这两张纹理拼合成一张大的纹理,这样,你就可以使

  • Unity中 mesh生成斜坡的示例代码

    Mesh概念: Mesh是Unity中的一个组件,称为网格组件.通俗的讲,Mesh是指模型的网格,3D模型是由多边形拼接而成,而多边形实际上是由多个三角形拼接而成的.所以一个3D模型的表面其实是由多个彼此相连的三角面构成.三维空间中,构成这些三角形的点和边的集合就是Mesh. Mesh组成: 1.顶点坐标数组vertexes 2.顶点在uv坐标系中的位置信息数组uvs 3.三角形顶点顺时针或者逆时针索引数组triangles 4.MeshFiler组件,用于增加mesh属性 5.MeshRend

  • 详解Unity中Mask和RectMask2D组件的对比与测试

    组件用法 Mask组件可以实现遮罩的效果,将一个图像设为拥有mask组件图像的子物体,最后就会隐藏掉子图像和mask图像不重合的部分.例如: (蓝色的圆形名为mask,数字图片名为image) 在"mask"图片上添加mask组件后的结果(可以选择是否隐藏mask图像): RectMask2D的基本用法 RectMask2D的用法和mask大致相同,不过RectMask2D只能裁剪一个矩形区域,同时RectMask2D可以选择边缘虚化 原理分析 Mask的原理分析 Mask会赋予Ima

  • C++ 中引用与指针的区别实例详解

    C++ 中引用与指针的区别实例详解 引用是从C++才引入的,在C中不存在.为了搞清楚引用的概念,得先搞明白变量的定义及引用与变量的区别,变量的要素一共有两个:名称与空间. 引用不是变量,它仅仅是变量的别名,没有自己独立的空间,它只符合变量的"名称"这个要素,而"空间"这个要素并不满足.换句话说,引用需要与它所引用的变量共享同一个内存空间,对引用所做的改变实际上是对所引用的变量做出修改.并且引用在定义的时候就必须被初始化.     参数传递的类型及相关要点: 1 按值

  • 基于python中staticmethod和classmethod的区别(详解)

    例子 class A(object): def foo(self,x): print "executing foo(%s,%s)"%(self,x) @classmethod def class_foo(cls,x): print "executing class_foo(%s,%s)"%(cls,x) @staticmethod def static_foo(x): print "executing static_foo(%s)"%x a=A(

  • PHP中isset与array_key_exists的区别实例分析

    本文实例讲述了PHP中isset与array_key_exists的区别.分享给大家供大家参考.具体分析如下: 1.对于数组值的判断不同,对于值为null或''或false,isset返回false,array_key_exists返回true: 2. 执行效率不同,isset是内建运算符,array_key_exists是php内置函数,isset要快一些.请参考:PHP 函数实现原理及性能分析 3.当用isset访问一个不存在索引数组值时,不会引起一个E_NOTICE的php错误消息: 4.

  • Linux C中sockaddr和sockaddr_in的区别

    Linux C中sockaddr和sockaddr_in的区别 struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址. 在各种系统调用或者函数中,只要和网络地址打交道,就得用到这两个结构体. 网络中的地址包含3个方面的属性: 1 地址类型: ipv4还是ipv6 2 ip地址 3 端口 相应的,头文件有如下定义: include <netinet/in.h> struct sockaddr { unsigned short sa_family;

随机推荐