【Unity3D】Transform组件
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组件的更多相关文章
- unity3d中Transform组件变量详解
Transform组件是每个游戏对象必须有的一个组建,因为你创建一个空物体,它也有该组建,因为unity3d是面向组建开发的一款游戏引擎.通过一张图片来看看它的属性 你可以在通过代码查看这些属性的区别 ...
- Transform组件C#游戏开发快速入门
Transform组件C#游戏开发快速入门大学霸 组件(Component)可以看作是一类属性的总称.而属性是指游戏对象上一切可设置.调节的选项,如图2-8所示.本文选自C#游戏开发快速入门大学霸 ...
- Unity3D深入浅出 -组件与节点之间的调用关系
一.transform组件用途 1.维护场景树 2.对3D物体的平移,缩放,旋转 二.场景树定义 在Hierarchy视图中显示的: 一个game_scene场景,下面有Main Camera节点,D ...
- 关于Unity中的transform组件(三)
game_root节点下右一个Cube子节点,和一个Sphere节点,脚本挂载在game_root下 四元数:(1)Quaternion rot (2)this.cube.rotation 欧拉角:V ...
- 关于Unity中的transform组件(一)
一.transform组件用途 1.维护场景树 2.对3D物体的平移,缩放,旋转 二.场景树定义 在Hierarchy视图中显示的: 一个game_scene场景,下面有Main Camera节点,D ...
- Unity3D中组件事件函数的运行顺序
事件函数的运行顺序 Unity 脚本中有很多按预设顺序以脚本身份执行的事件函数. 其执行顺序例如以下: 载入第一个场景 启动场景时调用这些函数(为场景中的每一个对象调用一次). Awake: 始终在调 ...
- Unity3d基础组件 (Component) 和脚本 (Script) 关系
原版的:http://edu.china.unity3d.com/learning_document/getData?file=/Manual/TheComponent-ScriptRelations ...
- U3D Transform组件
Variables position Vector3类型,物体位置,相对于世界坐标系的值.就是矩阵的最后一行的值. localPosition Vector3类型,物体相对于父元素的位置. euler ...
- Unity3D Image 组件附入图片问题
作为新手经常会看到有个Image的组件 代码中理所当然的public 发现图片并不能附入其中, 解决办法直接 public Sprite 就可以了
- Transform组件以及相关API
Transform.Translate(Vector3,Space):以自身坐标系或者世界坐标系向某个方向移动物体. Vector3:表示方向和移动的距离. Space:空间.枚举类型,用来确定坐标系 ...
随机推荐
- 【LINT】cpplint 分析笔记
cpplint 分析笔记 · [前提得看下google规范] @2022-1-13 20:44:48 error message formate: [filename] [linenum] [mess ...
- [转帖]JVM随笔 --- 安全点(safe point)与 安全区域( safe region)
https://zhuanlan.zhihu.com/p/461298916 11 人赞同了该文章 最近回顾 JVM safe point 与 safe region 又有一些新的感悟与收获,特别写篇 ...
- Redis异常问题分析黄金一分钟
Redis异常问题分析黄金一分钟 背景 同事发现一个环境redis比较卡顿,导致业务比较难以开展. 问题是下午出现的. 六点左右找到我这边. 想着帮忙看看, 问题其实没有定位完全, 仅是发现了一个可能 ...
- [转帖]kafka压测多维度分析实战
设置虚拟机不同的带宽来进行模拟压测 ---------kafka数据压测-------------------1.公司生产kafka集群硬盘:单台500G.共3台.日志保留7天. 1. ...
- [转帖]GC 日志
https://www.xjx100.cn/news/188814.html?action=onClick 垃圾回收器的发展历史 1999年:随JDK1.3.1一起来的串行方式Serial GC(第一 ...
- [转帖]iptables的四表五链与NAT工作原理
本文主要介绍了iptables的基本工作原理和四表五链等基本概念以及NAT的工作原理. 1.iptables简介 我们先来看一下netfilter官网对iptables的描述: iptables is ...
- [转帖]华为OpenEuler欧拉系统添加epel源方法
https://blog.whsir.com/post-7002.html 由于国产华为OpenEuler欧拉系统的版本命名是22.03.22.03这种,并且在查看版本的路径中是/etc/open ...
- Win10 查看无线局域网的密码
1. 打开命令行 输入 control 打开控制面板 2. 进入网络和共享中心 3. 打开连接 4. 使用如下进行查看.
- JDK内嵌指令的简单学习
java 可以使用 java -jar的方式启动服务 日常工作中用到的比较少 javac 可以将.java 文件编译成 .class中间代码 这个工具开发编写代码中是经常需要使用的, jenkins ...
- Object.defineProperty熬夜整理的用法,保证你看的明白!
Object.defineProperty的基本使用 <script> let personObj={ name:'何西亚', sex:'男' } //我们想给这个对象添加一个属性 // ...