目录
在 Unity 开发中,Transform 组件是每个游戏物体都必备的重要组件。以下将详细介绍其相关知识及代码示例。
一、Transform 组件的基本概念
(一)与游戏物体父子关系的关联
游戏物体之间可以存在父子关系,而真正维持这种父子关系的是 Transform 组件,并非 GameObject 类本身。当有父子关系形成后,控制父物体时,子物体也会受到影响。
二、在脚本中获取和控制 Transform 组件
(一)获取组件
在脚本中获取 Transform 组件很简单,直接使用transform
就可以拿到对应的组件。
(二)位置相关
- 获取位置的方法
- 有
position
和localPosition
两种获取位置的方法。 position
代表物体在世界当中的位置。localPosition
代表物体相对于父体的位置,是一个相对位置。
- 有
using UnityEngine;
public class TransformTest : MonoBehaviour
{
void Start()
{
Debug.Log(transform.position);
Debug.Log(transform.localPosition);
}
}
(三)旋转相关
- 表示方式
rotation
是一个四元数,position
和localPosition
是Vector3
类型。除了rotation
,还有localRotation
。- 旋转有四元素和欧拉角两种表示方式,并且都有相对于世界和相对于本地的情况。
- 获取欧拉角度后就是一个
Vector3
,代表xyz
三个轴向的旋转。
using UnityEngine;
public class TransformTest : MonoBehaviour
{
void Start()
{
Debug.Log(transform.rotation);
Debug.Log(transform.localRotation);
Vector3 eulerAngles = transform.eulerAngles;
Debug.Log(eulerAngles);
}
}
(四)缩放相关
缩放只有相对于父体的缩放,通过transform
获取相关信息。
(五)物体方向向量相关
- 获取向量
- 物体的前方可以通过
transform.forward
获取,右方通过transform.right
获取,上方通过transform.up
获取,这相当于获取了三个轴对应的向量。
- 物体的前方可以通过
using UnityEngine;
public class TransformTest : MonoBehaviour
{
void Start()
{
Debug.Log(transform.forward);
Debug.Log(transform.right);
Debug.Log(transform.up);
}
}
(六)常用方法
- 物体看向某点
- 使用
transform.LookAt
方法可以让物体看向指定点,例如让物体看向原点:transform.LookAt(Vector3.zero)
。
- 使用
- 物体旋转
- 绕轴旋转可以使用
transform.Rotate
方法,比如绕up
轴每一帧旋转 1 度:transform.Rotate(Vector3.up * Time.deltaTime)
。 - 绕某个物体旋转使用
transform.RotateAround
方法,传绕的点、轴和速度等参数,例如绕原点的up
轴每一帧旋转 5 度:transform.RotateAround(Vector3.zero, Vector3.up, 5 * Time.deltaTime)
。
- 绕轴旋转可以使用
- 物体移动
- 使用
transform.Translate
方法进行移动,例如向前方移动:transform.Translate(Vector3.forward * 0.1f)
。
- 使用
(七)父子关系控制相关
- 获取父物体和子物体信息
- 获取当前物体的父物体可以使用
transform.parent
获取父物体的Transform
组件,使用transform.parent.gameObject
获取父物体的GameObject
。 - 获取子物体个数使用
transform.childCount
。
- 获取当前物体的父物体可以使用
- 解除父子关系与获取子物体
- 解除与子物体的父子关系使用
transform.DetachChildren
。 - 获取子物体可以通过
transform.Find
根据子物体名称查找,或者通过transform.GetChild
根据索引获取。还可以通过transform.IsChildOf
判断一个物体是否是另一个物体的子物体。 - 设置父物体可以使用
transform.SetParent
方法,例如transform.SetParent(otherTransform)
可以将当前物体的父物体设置为otherTransform
对应的物体。
- 解除与子物体的父子关系使用
Transform 组件在 Unity 开发中对于控制物体的位置、旋转、缩放以及父子关系起着至关重要的作用,熟练掌握其用法是进行游戏开发的基础。