1 前言

​ 每个游戏对象有且仅有一个 Transform 组件,Transform 组件保存了游戏对象的位置信息,用户可以通过操作 Transform 组件实现对游戏对象的平移、旋转、缩放等变换。每个 Script 组件需要继承 MonoBehaviour,MonoBehaviour 中有 Transform 属性。

​ 如果读者对 MonoBehaviour 不太了解,可以参考→MonoBehaviour的生命周期

​ 1)获取当前游戏对象的 Transform 组件

this.transform;
gameObject.tramsform;
GetComponent<Transform>();
gameObject.GetComponent<Transform>();

​ 2)获取其他游戏对象的 Transform 组件

GameObject.Find("name").transform
GameObject.FindGameObjectWithTag("tag").transform
transform.FindChild("name");

​ 3)Transform 中属性

// 游戏对象
gameObject
// name 和 tag
name、tag
// 游戏对象的位置
position、localPosition
// 游戏对象的旋转角
eulerAngles、localEulerAngles、rotation、localRotation
// 游戏对象的缩放比
localScale
// 游戏对象的右方、上方、前方
right、up、forward
// 层级相关
root、parent、hierarchyCount、childCount
// 相机和灯光
camera、light
// 游戏对象的其他组件
animation、audio、collider、renderer、rigidbody

​ 说明:rotation 属性是一个四元数(Quaternion)对象,可以通过如下方式将向量转换为 Quaternion:

Vector3 forward = new Vector3(1, 1, 1);
Quaternion quaternion = Quaternion.LookRotation(forward);

​ 4)Transform 中方法

// 平移
Translate(Vector3 translation)
// 绕eulerAngles轴自转,自转角度等于eulerAngles的模长
Rotate(Vector3 eulerAngles)
// 绕过point点的axis方向的轴公转angle度
RotateAround(Vector3 point, Vector3 axis, float angle)
// 绕过point点的axis方向的轴公转angle度(坐标系采用本地坐标系)
RotateAroundLocal(Vector3 point, Vector3 axis, float angle)
// 看向transform组件的位置
LookAt(transform)
// 获取组件类型
GetType()
// 获取子游戏对象的Transform组件(不能获取孙子组件)
FindChild("name")
// 获取子游戏对象的Transform组件(可以获取孙子组件)
Find("name")
// 通过索引获取子游戏对象的Transform组件(不能获取孙子组件)
GetChild(index)
// 获取游戏对象的子对象个数
GetChildCount()
// 获取其他组件
GetComponent<T>
// 在子游戏对象中获取组件
GetComponentsInChildren<T>()

2 应用

​ 本节将使用 Transform 组件实现月球绕地球转、地球绕太阳转,同时太阳、地球、月球都在自转。

​ 首先通过【GameObject→3D Object→Sphere】创建3个球,分别代表太阳、地球、月球,调整位置坐标分别为:(0, 0, 0)、(2, 0, 0)、(3, 0, 0),调整缩放系数分别为:1、0.7、0.5,再将如下 3 张图片拖至对应星球上。

​ 拖拽结束后,会生成 Materials 文件夹,里面有 3 个材质球,如下:

​ 接着通过【GameObject→3D Object→Plane】创建 1 个 Plane 对象,重命名为 “bg”,在 Materials 文件夹里右键,选择【Create→Material】创建一个材质球,选中材质球,在 Inspector 窗口给材质球添加黑色,再将该材质球拖拽到 bg 游戏对象上。

​ 在 Assets 窗口右键,选择【Create→C# Script】创建 3 个 Script 组件,分别重命名为 Sun、Earth、Moon,将 3 个 Script 组件分别拖拽至对应星球上。

​ Sun.cs

using UnityEngine;

public class Sun : MonoBehaviour {

	void Start () {
} void Update () {
transform.Rotate(-2 * Vector3.up);
}
}

​ Earth.cs

using UnityEngine;

public class Earth : MonoBehaviour {
private Transform center; void Start () {
center = GameObject.FindGameObjectWithTag("Sun").transform;
} void Update () {
transform.RotateAround(center.position, -Vector3.up, 2);
transform.Rotate(-4 * Vector3.up);
}
}

​ Moon.cs

using UnityEngine;

public class Moon : MonoBehaviour {
private Transform center;
private float theta = 0f; void Start () {
center = GameObject.FindGameObjectWithTag("Earth").transform;
} void Update () {
theta = theta + 0.08f;
transform.position = new Vector3(center.position.x + Mathf.Cos(theta), 0f, center.position.z + Mathf.Sin(theta));
transform.Rotate(-3 * Vector3.up);
}
}

运行效果

​ 声明:本文转自【Unity3D】Transform组件

【Unity3D】Transform组件的更多相关文章

  1. unity3d中Transform组件变量详解

    Transform组件是每个游戏对象必须有的一个组建,因为你创建一个空物体,它也有该组建,因为unity3d是面向组建开发的一款游戏引擎.通过一张图片来看看它的属性 你可以在通过代码查看这些属性的区别 ...

  2. Transform组件C#游戏开发快速入门

    Transform组件C#游戏开发快速入门大学霸 组件(Component)可以看作是一类属性的总称.而属性是指游戏对象上一切可设置.调节的选项,如图2-8所示.本文选自C#游戏开发快速入门大学霸   ...

  3. Unity3D深入浅出 -组件与节点之间的调用关系

    一.transform组件用途 1.维护场景树 2.对3D物体的平移,缩放,旋转 二.场景树定义 在Hierarchy视图中显示的: 一个game_scene场景,下面有Main Camera节点,D ...

  4. 关于Unity中的transform组件(三)

    game_root节点下右一个Cube子节点,和一个Sphere节点,脚本挂载在game_root下 四元数:(1)Quaternion rot (2)this.cube.rotation 欧拉角:V ...

  5. 关于Unity中的transform组件(一)

    一.transform组件用途 1.维护场景树 2.对3D物体的平移,缩放,旋转 二.场景树定义 在Hierarchy视图中显示的: 一个game_scene场景,下面有Main Camera节点,D ...

  6. Unity3D中组件事件函数的运行顺序

    事件函数的运行顺序 Unity 脚本中有很多按预设顺序以脚本身份执行的事件函数. 其执行顺序例如以下: 载入第一个场景 启动场景时调用这些函数(为场景中的每一个对象调用一次). Awake: 始终在调 ...

  7. Unity3d基础组件 (Component) 和脚本 (Script) 关系

    原版的:http://edu.china.unity3d.com/learning_document/getData?file=/Manual/TheComponent-ScriptRelations ...

  8. U3D Transform组件

    Variables position Vector3类型,物体位置,相对于世界坐标系的值.就是矩阵的最后一行的值. localPosition Vector3类型,物体相对于父元素的位置. euler ...

  9. Unity3D Image 组件附入图片问题

    作为新手经常会看到有个Image的组件 代码中理所当然的public 发现图片并不能附入其中, 解决办法直接 public Sprite 就可以了

  10. Transform组件以及相关API

    Transform.Translate(Vector3,Space):以自身坐标系或者世界坐标系向某个方向移动物体. Vector3:表示方向和移动的距离. Space:空间.枚举类型,用来确定坐标系 ...

随机推荐

  1. Oracle实例的启动和关闭

    启动模式 1.NoMount 模式(启动实例不加载数据库) 命令:startup nomount 讲解:这种启动模式只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不会打 ...

  2. C++开发PHP扩展

    前端时间用C开发PHP扩展,用C实现字符串和简单的cache不友好,因而有了用C++开发的想法. 相关环境初始化配置准备 1.用php源码提供的脚手架生成扩展名 php ext/ext_skel.ph ...

  3. oceanbase部署维护命令学习

    oceanbase部署维护命令学习 背景 之前学习过TIDB数据库, 最近又准备学习一下Oceanbase数据库 发现其实两者还是比较相似的. 比较大的区别在于. TiDB是完全开源的, 并且比较明确 ...

  4. Cloudquery的学习安装与使用

    Cloudquery的学习安装与使用 下载 官方下载地址: https://www.cloudquery.club/download https://pan.baidu.com/s/1a7XOrnMU ...

  5. SkyWalking的学习之二(性能优化以及log)

    SkyWalking的学习之二(性能优化以及log) 背景 周六在家学习了SkyWalking的交单部署和agent的方式获取日志. 万恶的周天上班到公司发现出现了宕机. 具体原因是我想进行SkyWa ...

  6. [转帖]使用 TiUP 部署 TiDB 集群

    https://docs.pingcap.com/zh/tidb/stable/production-deployment-using-tiup TiUP 是 TiDB 4.0 版本引入的集群运维工具 ...

  7. [转帖]Linux三剑客之sed的初阶使用

    https://www.jianshu.com/p/ceea435635a2 大多数情况下,对于文件内容的修改需要依赖交互式的软件来实现,例如vim修改文件的内容则是依赖光标的移动和修改操作来完成对文 ...

  8. [转帖]理解 postgresql.conf 的work_mem 参数配置

    https://developer.aliyun.com/article/401250 简介: 主要是通过具体的实验来理解 work_mem 今天我们着重来了解 postgresql.conf 中的 ...

  9. 前端 Git-Hooks 工程化实践

    前言 前段时间,部门的前端项目迁移到 monorepo 架构,笔者在其中负责跟 git 工作流相关的事情,其中就包括 git hooks 相关的工程化的实践.用到了一些常用的相关工具如 husky.l ...

  10. Python控制微信,实现聊天机器人

    自从微信禁止网页版登陆之后,itchat 库实现的功能也就都不能用了,那现在 Python 还能操作微信吗?答案是:可以! 在Github上有一个项目叫<WeChatPYAPI>可以使用 ...