在Unity里面Transform组件是有两个重要的作用,一个是表示在坐标系的位置,旋转和缩放,另外一个是GameObject的父节点是通过Transform组件来维持,Transform类是继承了IEnumerable接口,它也是一个集合的类型,可以通过foreach语句来遍历它的子对象。
先来看看他的成员变量和函数:
一、成员变量
position:在世界空间坐标transform的位置。
localPosition:相对于父级的变换的位置。如果该变换没有父级,那么等同于Transform.position。
eulerAngles:世界坐标系中的旋转(欧拉角)。
localEulerAngles:相对于父级的变换旋转角度。
right:世界坐标系中的右方向。(世界空间坐标变换的红色轴。也就是x轴。)
up:世界坐标系中的上方向。(在世界空间坐标变换的绿色轴。也就是y轴。)
forward:世界坐标系中的前方向。(在世界空间坐标变换的蓝色轴。也就是z轴。)
rotation:世界坐标系中的旋转(四元数)。
localRotation:相对于父级的变换旋转角度。
localScale:相对于父级的缩放比例。
parent:父对象Transform组件。
worldToLocalMatrix:矩阵变换的点从世界坐标转为自身坐标(只读)。
localToWorldMatrix:矩阵变换的点从自身坐标转为世界坐标(只读)。
root:对象层级关系中的根对象的Transform组件。
childCount:子对象数量。
lossyScale:全局缩放比例(只读)。
二、成员函数
Translate:向某方向移动物体多少距离。
Rotate:按照指定欧拉角旋转。
RotateAround:按照多少度在世界坐标的某位置轴旋转物体。
LookAt:旋转物体使z轴指向目标物体。
TransformDirection:将一个方向从局部坐标变换到世界坐标方向。
InverseTransformDirection:将一个方向从世界坐标变换到局部坐标方向。
TransformPoint、InverseTransformPoint。
Description:与所有子物体解除父子关系。
Find:通过名字查找子物体并返回它。如果没有查找到子物体名字,将返回null。如果名字包含“/”字符它将向路径一样穿越层次。
Transform组件最常见的用法是作为坐标系的位置来使用,如下代码所示:
// 向前移动 transform.Translate(Vector3.forward * Time.deltaTime * 3) // 绕自身坐标Y轴旋转 transform.Rotate(Vector3.up * Time.deltaTime * 30) // 绕世界坐标Y轴旋转 transform.RotateAround(Vector3.zero, Vector3.up, Time.deltaTime * 30)
作为父节点来使用通常会用于遍历获取自对象,如:
void Start() { //Loop through children foreach (Transform child in transform) { //If the child is not a triggerer if (child.name != "SpawnTriggerer" && child.name != "ResetTriggerer") { //Add it to the elements list, and deactivate it elements.Add(child.gameObject); EnableDisable(child.gameObject, false); } } }