Unity学习——变换(Transform)组件
介绍
变换(Transform)组件确定场景中每个对象的“位置(Position)”、“旋转(Rotation)”和“缩放(Scale)”。
每⼀个游戏对象(GameObject)都有⼀个变换(Transform)组件。
属性
位置:变换组件在X、Y、Z轴上的位置(后⾯将解释为什么不说是物体的轴上的位置信息)
旋转:变换组件绕X、Y、Z轴所旋转的度数
缩放:变换组件沿X、Y、Z轴上的缩放,值为1时则为原始⼤⼩(被导⼊或创建时物体的⼤⼩)
注意:变换的位置、旋转以及缩放是相对于该物体的(变换组件的)⽗级测量的。当没有⽗级时则在世界坐标下显⽰其属性。
相关脚本
(注:代码块上⽅是属性或⽅法的作⽤域、数据类型和访问权限(get/set),代码块中是具体的使⽤⽅法)
属性
public int childCount { get; }
transform.childCount
物体的(变换组件的)⼦对象的数⽬(不包括⾃⾝)
public Vector3 eulerAngles { get; set; }
transform.eulerAngles
物体旋转属性的以度为单位的欧拉⾓(即与变换组件中旋转的三个量相对应)
public Vector3 forward { get; set; }
transform.forward
世界空间中,物体的(变换组件的)z轴
应当注意当物体旋转⾓度后,其⾃⾝的坐标轴也随之变换,使⽤“transform.forward”可以获取物体当前⾃⾝坐标系(Local⽽⾮Global)的z轴
public bool hasChanged { get; set; }
transform.hasChanged
⾃从上⼀次"hasChanged"被设为false后,变换组件是否发⽣了变化?
应注意其默认值为true。因此需⼿动设置为false后进⾏检测。当其改变为true后,其真值不会⾃⾝改变为false
public int hierarchyCapacity { get; set; }
transform.hierarchyCapacity
变换在层级中数据结构的变换能⼒
即⽬前该物体在Hierarchy窗⼝中对应的树的可容纳最⼤结点数
应注意其数值会随着结点数的增加⽽扩容,因此对于需要频繁增加⼦物体的物体,可以事先设置该值⽐
预计的最⼤值⾼⼀点,以避免反复修改此值造成的性能降低
public int hierarchyCount { get; }
transform.hierarchyCount
变化在层级中数据结构的所包含的变换组件数⽬
即物体及其⼦物体所包含的变换组件的总数⽬
public Vector3 localEulerAngles { get; set; }
transform.localEulerAngles
物体的相对于⽗级所旋转的欧拉⾓
如需设置请注意使⽤正值且不要超过360度
public Vector3 localPosition { get; set; }
transform.localPosition
物体相对于⽗级的位置,没有⽗级则与世界坐标下⼀致
public Quaternion localRotation { get; set; }
transform.localRotation
物体相对于⽗级的旋转属性
public Vector3 localScale { get; set; }
transform.localScale
物体相对于⽗级的缩放属性
public Matrix4x4 localToWorldMatrix { get; }
transform.localToWorldMatrix
将点从局部空间转换为世界空间的矩阵
public Vector3 lossyScale { get; }
transform.lossyScale
世界坐标系下物体的缩放属性
注意当物体的⽗级进⾏了缩放并且该物体旋转后,该值不再准确
public Transform parent { get; set; }
transform.parent
物体的⽗级的变换属性
public Vector3 position { get; set; }
transform.position
物体在世界坐标系下的位置属性
public Vector3 right { get; set; }
transform.right
世界空间中,物体的(变换组件的)x轴
应当注意当物体旋转⾓度后,其⾃⾝的坐标轴也随之变换,使⽤“transform.right”可以获取物体当前⾃⾝坐标系(Local⽽⾮Global)的x轴
float uppublic Transform root { get; }
<
返回物体所在层级结构的根的变换属性,没有⽗级则为⾃⾝
public Quaternion rotation { get; set; }
物体在世界坐标系下的变换属性,以四元数形式存储
注意它并不与变换组件中对应的旋转的三个属性对应(可以使⽤transform.eulerAngles进⾏修改)
它的值⼩于180度
public Vector3 up { get; set; }
transform.up
世界空间中,物体的(变换组件的)y轴
应当注意当物体旋转⾓度后,其⾃⾝的坐标轴也随之变换,使⽤“transform.right”可以获取物体当前⾃⾝坐标系(Local⽽⾮Global)的y轴
public Matrix4x4 worldToLocalMatrix { get; }
transform.worldToLocalMatrix
将点从世界空间转换为局部空间的矩阵
公开⽅法
public void DetachChildren();
transform.DetachChildren()
将物体的所有⼦对象都与其取消⽗⼦关系
public Transform Find(string n);
参数
string n:要到的⼦物体的名字
返回值
如果到了该孩⼦,则返回其变换组件,否则返回null
transform.Find("ChildName");
transform.Find("ChildName/GrandChildName");
通过名字n到物体的⼦对象的变换组件
注意以上⽤法只适⽤于⼦物体⽽不适⽤与孙物体或更多层级下的物体查
如需查更低层级的物体,可以像路径名⼀样进⾏查,如第⼆⾏所⽰
public Transform GetChild(int index);
参数
int index:⼦物体对应的索引
返回值
索引对应的⼦物体的变换组件
transform.GetChild(0);//到第⼀个⼦物体变换组件
transform.GetChild(0).GetChild(0);//到第⼀个⼦物体的第⼀个⼦物体的变换组件
⼦物体的索引在层级窗⼝从上⾄下由0开始递增
public int GetSiblingIndex();
返回值
⼦物体相对于⽗物体的索引值
transform.GetSiblingIndex();
获取物体在层级窗⼝下的索引,即是其⽗物体的从上之下的第⼏个物体(从0开始)
注意⽆⽗物体时,则会在层级窗⼝最外层从上⾄下由0开始排列
public Vector3 InverseTransformDirection(Vector3 direction);
参数
Vector3 direction:表⽰某个⽅向的三维向量
返回值
物体⾃⾝坐标系下direction的⽅向向量
transform.InverseTransformDirection(Vector3.forward);//将世界坐标系下的z轴⽅向转换为物体⾃⾝坐标系下的⽅向
将direction由世界坐标系转换为物体的⾃⾝坐标系下的向量表⽰
public Vector3 InverseTransformDirection(float x, float y, float z);
参数
float x, float y, float z:表⽰⽅向的三个轴上的参数
返回值
物体⾃⾝坐标系下(x,y,z)的⽅向向量
transform.InverseTransformDirection(0, 0, 1);
将(x,y,z)由世界坐标系转换为物体的⾃⾝坐标系下的向量表⽰
public Vector3 InverseTransformPoint(Vector3 position);
参数
Vector3 position:表⽰某个点(位置)的三维向量
返回值
物体⾃⾝坐标系下position的位置向量
transform.InverseTransformPoint(ansform.position);//将世界坐标系下的主相机的位置转换为物体⾃⾝坐标系下的位置(即与相机的相对位置)将position由世界坐标系转换为物体的⾃⾝坐标系下的向量表⽰
public Vector3 InverseTransformPoint(float x, float y, float z);
参数
float x, float y, float z:表⽰某个点(位置)的三个轴上的参数
返回值
物体⾃⾝坐标系下(x,y,z)的位置向量
transform.InverseTransformPoint((0,0,0));
将(x,y,z)由世界坐标系转换为物体的⾃⾝坐标系下的向量表⽰
注意这个函数会受到缩放的影响
public Vector3 InverseTransformVector(Vector3 vector);
参数
Vector3 vector:某个向量
返回值
物体⾃⾝坐标系下某个向量的表⽰
transform.InverseTransformVector(Vector3.forward);//将世界坐标系下的z轴⽅向转换为物体⾃⾝坐标系下的⽅向
将vector由世界坐标系转换为物体的⾃⾝坐标系下的向量
public Vector3 InverseTransformVector(float x, float y, float z);
参数
float x, float y, float z:表⽰某个向量的三个轴上的参数
返回值
物体⾃⾝坐标系下(x,y,z)的转换后的向量
transform.InverseTransformVector((0,0,0));
将(x,y,z)由世界坐标系转换为物体的⾃⾝坐标系下的向量
注意这个函数会受到缩放的影响
public bool IsChildOf([NotNull] Transform parent);
参数
[NotNull] Transform parent:⽗对象的变换属性,空值时会提⽰错误
返回值
若该对象是parent的⼦对象或更深层次的对象,则返回true;否则返回false
transform.ansform);
判断⼀个物体是否是parent的⼦物体或更深层的物体
public void LookAt(Transform target, [DefaultValue("Vector3.up")] Vector3 worldUp);
参数
Transform target:物体所看向的变换属性
[DefaultValue("Vector3.up")] Vector3 worldUp:所指定的向上的向量,默认值为Vector3.up,即(0,1,0)
transform.ansform);
transform.ansform,Vector3.down);
旋转变换组件,使得指向前⽅的向量指向⽬标位置
确定向前的向量(蓝轴)后,需要确定绕蓝轴旋转的⾓度,这⾥使⽤⼀个表⽰物体上⽅向的向量来约束,注意这个参数是⾮强制性⽽是以引导的作⽤旋转变换组件(优先确保先指向⽬标位置)
public void LookAt(Vector3 worldPosition, [DefaultValue("Vector3.up")] Vector3 worldUp);
参数
Vector3 worldPosition:物体所看向的位置
[DefaultValue("Vector3.up")] Vector3 worldUp:所指定的向上的向量,默认值为Vector3.up,即(0,1,0)
transform.ansform.position);
transform.ansform.position,Vector3.down);
此重载函数与上⽅类似,不再赘述
public void Rotate(Vector3 eulers, [DefaultValue("Space.Self")] Space relativeTo);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论