《Unity_API解析》 第十二章 Transform类
Posted Colve
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Unity_API解析》 第十二章 Transform类相关的知识,希望对你有一定的参考价值。
Transform类继承自Component类,并实现了IEnumberable接口。Transform是GameObject必须拥有的一个组件,用来管理所在GameObject对象的坐标位置、旋转角度和大小缩放。由于Transform实现了Ienumberable接口,于是可以在程序中使用foreach()方法快速遍历子物体的Transform结构。即:
void Start()
{
foreach (Transform item in transform)
{
}
}
Transform类实例属性
eulerAngles属性:欧拉角
public Vector3 eulerAngles{get; set;}
此功能用于返回和设置GameObject对象的欧拉角。
forward属性:z轴单位向量
public Vector3 forward{get; set;}
此属性用于返回或设置transform自身坐标系中z轴方向的单位向量对应的世界坐标系中的单位向量,transform.forward即为transform.TransformDirection(new Vector3(0.0f, 0.0f, 0.0f))的简化方式。
hasChanged属性:transform组件是否被修改
public bool hasChanged{get; set;}
此属性用于判断GameObject对象上次将此属性设为false以来,其transform组件的此属性是否被修改过,默认值为true。
localPosition属性:局部坐标系为值
public Vector3 localPosition{get; set;}
此属性用于设置或返回GameObject对象在局部坐标系的位置,若无父级对象则和属性Transform.positon相同。transform.localPosition的值受父级对象lossyScale的影响。
localToWorldMatrix属性:转换矩阵
public Matrix4x4 localToWorldMatrix{get;}
此属性用于返回从transofrm局部坐标系向世界坐标系转换的Matrix4x4矩阵。例设A为Vector3,B为Transform实例,且B的x、y、z轴方向与世界坐标系方向一致。
Vector3 vec3 = B.localToWorldMatrix.MultiplyPoint3x4(A);
则分量值vec3.x = B.Position.x + A.x * B.lossyScale.x。
一般情况可用TransformPoint(positon : Vector3)来实现Vector3实例从transform局部坐标系向世界坐标系的转换。
parent属性:父物体Transform实例
public Transform parent{get; set;}
此属性用于返回父物体的Transform实例。若要返回transform的最顶层的父物体,可以使用transform.root属性。
worldToLocalMatrix属性:转换矩阵
public Matrix4x4 worldToLocalMatrix{get;}
此属性用于返回物体从世界坐标系向transform自身坐标系转换的Matrix4x4矩阵。
一般可用方法InverseTransformPoint(position : Vector3)来实现Vector3实例从世界坐标系向transform自身坐标系转换。
Transform类实例方法
DetachChildren方法:分离物体层级关系
public void DetachChidren();
此方法的功能是使GameObject对象的所有子物体和自身分离层级关系。
GetChild方法:获取GameObject对象子类
public Transform GetChild(int index);
参数为子物体索引值。
此方法用于返回transform的索引值为index的子类Transfrom实例。参数index的值要小于transform的childCount的值。
InverseTransformDirection方法:坐标系转换
public Vector3 InverseTransformDirection(Vector3 direction);
public Vector3 InverseTransformDirection(float x, float y, float z);
此方法用于将参数direction从世界坐标系转换到GameObject对象的局部坐标系。
InverseTransfromPoint方法:点的相对坐标向量
public Vector3 InverseTransformPoint(Vector3 position);
public Vector3 InverseTransformPoint(float x, float y ,float z);
此方法用于返回参数position向量相对于GameObject对象局部坐标系的差向量,返回值受transform.lossyScale和transform.rotation影响。
IsChildOf方法:是否为子物体
public bool IsChildOf(Transform parent);
参数parent为父物体的Transform实例。此方法用于判断transform对应的GameObject对象是否为参数parent的子物体。
LookAt方法:物体朝向
public void LookAt(Transform target);
public void LookAt(Vector3 worldPosition);
public void LookAt(Transform target, Vector3 worldUp);
public void LookAt(Vector3 worldPosition, Vector3 worldUp);
其中参数target为transform自身坐标系指向的目标,参数worldUp为transform自身坐标系中y轴最大限度指向的方向。
此方法的功能为使GameObject对象的z轴指向target,若自定义worldUp的方向,则GameObject对象的forword方向一直指向target,然后transform绕着自身坐标系的z轴即forward方向旋转到一个使得自身的y轴方向最接近worldUp的地方。
Rotate方法:绕坐标轴或某个向量旋转
public void Rotate(Vector3 eulerAngles);
public void Rotate(Vector3 eulerAngles, Space relativeTo);
public void Rotate(float xAngle, float yAngle, float zAngle);
public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo);
public void Rotate(Vector3 axis, float angle);
public void Rotate(Vector3 axis, float angle, Space relativeTo);
此方法的前四个重载是使得transform实例在相对参数relativeTo的坐标系中旋转欧拉角eulerAngles,后两个重载是使得GameObject对象在relativeTo坐标系中绕轴向量axis旋转angle度。
、
RotateAround方法:绕轴点旋转
public void RotateAround(Vector3 axis, float angle);
public void RotateAround(Vector3 point, Vector3 axis, float angle);
其中参数point为参考点坐标,参数axis为旋转轴方向,参数angle为旋转角度。
TransfromDirection方法:坐标系转换
public Vector3 TransformDirection(Vector3 direction);
public Vector3 TransformDirection(float x, float y, float z);
此方法用于将向量direction从transform局部坐标系转换到世界坐标系。
TransformPoint方法:点的世界坐标位置
public Vector3 TransformPoint(Vector3 position);
public Vector3 TransformPoint(float x, float y, float z);
此方法用于返回GameObject对象局部坐标系中position在世界坐标系中的位置。
Translate方法:相对坐标系移动或相对其他物体移动
public void Translate(Vector3 translation);
public void Translate(Vector3 translation, Space relativeTo);
public void Translate(float x, float y, float z);
public void Translate(float x, float y, float z, Space relativeTo);
public void Translate(Vector3 translation, Transform relativeTo);
public void Translate(float x, float y, float z, Transform relativeTo);
此方法前四个重载的功能是使得GameObject对象在relativeTo的坐标系空间中移动参数translation指定的向量,后两个重载的功能是使得GameObject对象在相对relativeTo的坐标系中移动向量translation。
关于localScale和lossyScale的注解:
当GameObject对象A为GameObject对象B的父物体时,父物体A的各个分量放缩值x、y、z的大小应该保持1:1:1的比例,否则当子物体B的Rotation值比例不为1:1:1时,B物体将会发生变形。
设GameObject对象A为B的父物体,当A物体各个分量的放缩值保持1:1:1的比例时,子物体B的lossyScale返回值即为B物体相对世界坐标系的放缩值,关系为B.localScale = B.lossyScale/A.localScale。
以上是关于《Unity_API解析》 第十二章 Transform类的主要内容,如果未能解决你的问题,请参考以下文章