《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类的主要内容,如果未能解决你的问题,请参考以下文章

第十二章   Linux   DNS域名解析

《Unity_API解析》 第十一章 Time类

数据库系统概念笔记——第十二章:查询处理

《Unity_API解析》 第十四章 Vector2类Vector3类

流畅的python第十二章继承的优缺点学习记录

传智播客JavaWeb程序设计任务教程 第十,十一,十二章练习答案2021最新合集