Unity基础—Transform类

本文详细介绍了Unity中Transform类的功能及用法,包括成员变量如position、rotation等,以及常用函数Translate、Rotate等,并通过示例代码说明如何使用这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Transform类是Unity脚本编辑的一个基础且重要的类,所以我们下面一起来学习一下这个类。

一、成员变量

position:在世界空间坐标transform的位置。
localPosition:相对于父级的变换的位置。如果该变换没有父级,那么等同于Transform.position。
eulerAngles:世界坐标系中的旋转(欧拉角)。
localEulerAngles:相对于父级的变换旋转角度。
right:世界坐标系中的右方向。(世界空间坐标变换的红色轴。也就是x轴。)
up:世界坐标系中的上方向。(在世界空间坐标变换的绿色轴。也就是y轴。)
forward:世界坐标系中的前方向。(在世界空间坐标变换的蓝色轴。也就是z轴。)
rotation:世界坐标系中的旋转(四元数)。
localRotation:相对于父级的变换旋转角度。
localScale:相对于父级的缩放比例。
parent:父对象Transform组件。
worldToLocalMatrix:矩阵变换的点从世界坐标转为自身坐标(只读)。
localToWorldMatrix:矩阵变换的点从自身坐标转为世界坐标(只读)。
root:对象层级关系中的根对象的Transform组件。
childCount:子对象数量。
lossyScale:全局缩放比例(只读)。

二、函数

1)Translate,用来移动物体的函数,非常常用的一个函数。

public void Translate (translation : Vector3, relativeTo : Space = Space.Self) : void

把物体向translation方向移动,距离为translation.magnitude。 relativeTo表示这个移动的参考坐标系。

public void Translate (x : float, y : float, z : float, relativeTo : Space = Space.Self) : void

同上

public void Translate (translation : Vector3, relativeTo : Transform) : void

如果relativeTo 不是null,则以目标物体relativeTo的自身轴向作为参考坐标系。

public void Translate (x : float, y : float, z : float, relativeTo : Transform) : void

同上

脚本:

var speed=30;

//将物体以30米每秒的速度向前移动。

trasform.Translate(Vector3.forward*speed*Time.deltaTime);

 

2)Rotate,用来旋转物体的函数,非常常用,在知道需要旋转的角度的情况下。如果要让物体旋转到指定位置,需要搭配Quaternion来使用。

public void Rotate (eulerAngles : Vector3, relativeTo : Space = Space.Self) : void

旋转eulerAngles度(3个轴向分别旋转),以relativeTo为参考坐标系

public void Rotate (xAngle : float, yAngle : float, zAngle : float, relativeTo : Space = Space.Self) : void

同上

public void Rotate (axis : Vector3, angle : float, relativeTo : Space = Space.Self) : void

以axis为轴旋转angle度,以relativeTo为参考坐标系

 

3)RotateAround 让物体以某一点为轴心成圆周运动。

public void RotateAround (point : Vector3, axis : Vector3, angle : float) : void

让物体以point为中心,绕axis为轴向旋转angle度。保持原来与point的距离。

 

4)LookAt 让物体的z轴看向目标物体

public void LookAt (target : Transform, worldUp : Vector3 = Vector3.up) : void

让物体的z轴看向target的位置,并以worldUp为y轴指向方向。

public void LookAt (worldPosition : Vector3, worldUp : Vector3 = Vector3.up) : void

让物体看向worldPosition

 

5)TransformDirection

public Vector3 TransformDirection (direction : Vector3) : Vector3

返回以物体自身为坐标轴的向量direction在世界坐标中的朝向向量。

public Vector3 TransformDirection (x : float, y : float, z : float) : Vector3

同上

 

6)InverseTransformDirection

public Vector3 InverseTransformDirectionTransformDirection (direction : Vector3) : Vector3

public Vector3 InverseTransformDirectionTransformDirection (x : float, y : float, z : float) : Vector3

与TransformDirection相反,从世界坐标转换到自身相对坐标。

 

7)TransformPoint

public Vector3 TransformPoint (position : Vector3) : Vector3

public Vector3 TransformPoint (x : float, y : float, z : float) : Vector3

把一个点从自身相对坐标转换到世界坐标

 

8)InverseTransformPoint

public Vector3  InverseTransformPoint (position : Vector3) : Vector3

public Vector3  InverseTransformPoint (x : float, y : float, z : float) : Vector3

把一个点从时间坐标转换到自身坐标的位置。

 

9)DetachChildren

public void DetachChildren () : void

把自身所有的子物体的父物体都设成世界,也就是跟自己的所有子物体接触父子关系。

 

10)Find

public Transform Find (name : string) : Transform

找到一个名字是name的物体并返回

如果没有找到则返回null。如果字符串被/隔离,函数则会像文件路径一样逐级下查。

// The magical rotating finger
function Update() {
aFinger = transform.Find("LeftShoulder/Arm/Hand/Finger");
aFinger.Rotate(Time.deltaTime*20, 0, 0);
}

 

11)IsChildOf

public bool IsChildOf (parent : Transform) : bool

如果物体是parent的父子层级关系下的一员,返回true;

<think>好的,用户问的是UnityTransform和GameObject的区别。我需要先回想一下这两个概念的基础知识。首先,GameObject是Unity中最基本的实体,所有在场景中的对象都是GameObject。而Transform是每个GameObject都有的一个组件,用来处理位置、旋转和缩放。 用户可能是刚开始学习Unity的新手,对这两个概念容易混淆。他们可能不太明白为什么有时候要操作GameObject,有时候又要操作Transform。需要明确两者的从属关系,GameObject是容器,Transform是其属性的一部分。 接下来,我需要组织语言,先分别介绍两者的定义和功能,再对比它们的区别。比如,GameObject可以包含多个组件,而Transform是其中一个必需的组件。每个GameObject必须有Transform,但可能有其他组件如Renderer或Script。 可能用户在实际操作中遇到的问题,比如在代码中访问Transform时,是否需要先获取GameObject。这时候要说明GameObject和Transform的关系,例如通过gameObject.transform来获取Transform组件。 另外,可能还需要举例说明,比如禁用GameObject会同时禁用所有组件,而调整Transform的位置只会影响该对象的位置。这样用户能更直观地理解两者的不同作用。 还要注意术语的准确性,确保没有错误。比如,强调Transform,而GameObject是实体,两者在继承和组件结构中的位置。同时,可能需要提到父物体和子物体的层级关系是通过Transform来管理的,而GameObject本身是这些关系的载体。 总结时,要简明扼要,强调Transform是GameObject的一个属性,负责空间变换,而GameObject是实体本身,包含各种组件。这样的对比应该能帮助用户理清概念。</think>在 Unity 中,`Transform` 和 `GameObject` 是两个核心但完全不同的概念,以下是它们的区别和关系: --- ### **1. GameObject(游戏对象)** - **定义**:`GameObject` 是 Unity 场景中所有实体的基础容器,可以理解为场景中的“物体”。 - **作用**: - 它是一个“空壳”,需要通过添加**组件(Component)**来赋予功能(例如:模型、脚本、物理效果等)。 - 可以嵌套形成父子层级关系(通过 `Transform` 管理)。 - **特点**: - 本身没有功能,必须依赖组件。 - 可以通过 `Destroy(gameObject)` 销毁,或 `SetActive(false)` 禁用。 --- ### **2. Transform(变换组件)** - **定义**:`Transform` 是一个**组件**(继承自 `Component`),用于控制 `GameObject` 的空间属性。 - **作用**: - 管理位置(`position`)、旋转(`rotation`)、缩放(`scale`)。 - 管理层级关系(父子物体、子物体列表)。 - **特点**: - **所有 GameObject 必须有一个 Transform**(2D 对象可能是 `RectTransform`)。 - 通过 `gameObject.transform` 访问其 Transform。 - 不能单独存在,必须依附于 GameObject。 --- ### **3. 核心区别** | **对比项** | **GameObject** | **Transform** | |------------------|------------------------------------|----------------------------------------| | **本质** | 实体容器 | 控制空间属性的组件 | | **存在性** | 可以单独存在 | 必须依附于 GameObject | | **功能** | 依赖添加的组件 | 专门管理位置、旋转、缩放和层级关系 | | **访问方式** | 通过名称或代码获取 | 通过 `gameObject.transform` 获取 | | **父子关系管理** | 通过 Transform 的子物体列表实现 | 直接提供 `parent` 和 `children` 属性 | --- ### **4. 代码示例** ```csharp // 获取当前脚本所在的 GameObject GameObject myObject = gameObject; // 获取该 GameObject 的 Transform Transform myTransform = myObject.transform; // 修改位置(需通过 Transform) myTransform.position = new Vector3(0, 10, 0); // 销毁 GameObject(Transform 也会被销毁) Destroy(myObject); ``` --- ### **5. 常见关系** - **父子层级**:通过 `Transform` 设置 `parent` 属性,例如: ```csharp childTransform.parent = parentTransform; ``` - **组件依赖**:`GameObject` 是 `Transform` 的载体,而 `Transform` 是 `GameObject` 的必需属性。 --- **总结**: `GameObject` 是场景中的实体,而 `Transform` 是其控制空间属性的组件。所有操作位置的代码都通过 `Transform` 实现,而管理物体本身(如创建、销毁)则通过 `GameObject` 进行。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值