《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。

时间: 2024-12-25 01:35:53

《Unity_API解析》 第十二章 Transform类的相关文章

C Primer Plus (第五版) 第十二章 存储类、链接和内存管理 编程练习

第十二章 存储类.链接和内存管理 编程练习 1.Q不使用全局变量,重写程序清单13.4 #include <stdio.h>; int critic(int u); int main(void) { int units; printf("How many pounds to a firkin of butter?\n"); scanf_s("%d", &units); while (units != 56) critic(units); prin

第十二章:类

1:数据抽象,数据封装----类 2:数据抽象技术是接口,实现---分离:低层次的元素组合成高层次实体技术(例如函数). 3:利处:一是避免类内部无意破坏对象状态的用户级错误:二是可以根据需求完善实现,而不需要改变用户级代码. 4:内联函数是代码展开效果,所以使用处必须是定义处-即可见,类里默认定义函数则是内联函数,若体外定义,体内声明,则需要使用出定义函数: 5:不能重新定义:.h文件中不能定义函数,除非它是内联函数. 6:使用引用,或者指针:或者是在定义对象时,该类必须是定义完整的:否则出错

《Unity_API解析》 第十一章 Time类

Time类静态属性 realtimeSinceStartup属性:程序运行实时时间 public static float realtimeSinceStartup(){get;} 此属性用于返回从游戏启动到现在一运行的实时时间(只读),以秒为单位.此属性通常可用Time.time代替使用,但realtimeSinceStartup的返回值不收timeScale属性变化的影响. smoothDeltaTime属性:平滑时间间隔 public static float smoothDeltaTim

《Unity_API解析》 第三章 GameObject类

GameObject类实例属性 activeSelf属性:GameObject的Active标识 public bool activeSelf{ get; } 功能说明 此属性用来返回GameObject对象的Active标识状态,即物体的活跃状态. 注意:此属性与activeInHierarchy的区别.activeInHierarchy属性的功能是返回GameObject实例在程序运行时的激活状态,只有当GameObject实例的状态被激活时才会返回true.而且它会受其父物体对象激活状态的

第十二章(类的无参方法)

Java注释:    //:单行注释    /**/:多行注释    /** */:JavaDoc注释 方法:   语法: 访问修饰符 返回值类型 方法名(){       方法体      } 举例:        public void run(){         System.out.println("");        }        public String robball(){         String ball="球";         r

第十二章类的无参方法

一.javaDoc注释: 语法:/** * *@author FLC */ 生成javaDoc文档的步骤:点击File--Export--展开java文件夹--选择javaDoc--点击Next--制定生成doc文档的文件位置--点击Fish--找到生成文件位置查看. 二.类中的方法: 语法:   访问修饰符  方法返回值类型  方法名称(){} 例如: public void run(){ } public String ball(){ } String ball="球"; retu

进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用

进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量.所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来

[CSAPP笔记][第十二章并发编程]

第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟悉的例子. 我们主要将并发看做是一种操作系统内核用来运行多个应用程序的机制. 但是,并发不仅仅局限于内核.它也可以在应用程序中扮演重要的角色. 例如 Unix信号处理程序如何允许应用响应异步事件 例如:用户键入ctrl-c 程序访问虚拟存储器的一个未定义的区域 其他情况 访问慢速I/O设备 当一个应

Java 第十二章 继承 笔记

Java 第十二章  继承 笔记 一.使用继承:     1)方便修改代码     2)减少代码量 二.super 继承object 类:super 访问父类的无参构造:super 指的是object 的无参构造.     例:子类调用父类:super.属性 / super.方法    注意:子类不能继承父类私有属性:得用set.get方法来调用:    super只能写在代码块的第一句:super只能调用非私有的方法:    super只能出现在子类的方法和构造方法中. 三.不能被继承的父类成