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组件相关推荐

  1. Unity3D基础7:Transform组件

    一.组件(Component) 组件:即是游戏物体的组成零件 Unity3D就是一款"组件式"游戏开发引擎,使用各种各样的组件拼装出我们游戏物体,最终拼接出一款完整的游戏 组件也就 ...

  2. Unity3D基础10:利用Transform组件移动物体

    前文:https://blog.csdn.net/Jaihk662/article/details/86750789(Transform组件) https://blog.csdn.net/Jaihk6 ...

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

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

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

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

  5. 1、游戏对象,Transform组件

    记录笔记,各位大佬要是看到有什么不对的,麻烦指点下我,感激不尽!! 游戏对象: 每个游戏对象都会有一个Transform组件并且是无法删除的组件,它的作用是确定这个对象在世界中的位置,Transfor ...

  6. Unity3d transform.Find 找不到对象

    今天我用 transform.Find 找子对象,出现了找不到对象情况, 所以用另一个函数代替,一下就找到了,原因不明,难道unity3d哪里出错 /// <summary>/// 根据名 ...

  7. 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- 组件的使用...

    unity中的组件可以可视化添加,删除 unity 中组件也可以通过代码添加 1 using UnityEngine; 2 using System.Collections; 3 4 public c ...

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

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

  9. 【unity3d study ---- 麦子学院】---------- unity3d常用组件及分析 ---------- Animator动画状态机...

    Animator是unity 4版本之后的新动画 可以在编辑器中直接编辑连线各个动画的转换,也可以是用代码直接调用底层来转换动画 代码: 1 using UnityEngine; 2 using Sy ...

最新文章

  1. JavaScript基础初始时期分支(018)
  2. springboot 第四讲
  3. 数字图像处理经典论文汇总
  4. 在fedora23中安装virtualbox, 然后实现虚拟机irtualbox 或者 vmware 下的xp操作系统
  5. 怎么看另一个电脑端口是否通_谁一个人睡觉另一个看看夫妻的睡眠习惯
  6. Python函数参数值传递
  7. 10. OD-VC程序暴力破解
  8. AJAX POST跨域 解决方案 - CORS(转载)
  9. Windows Moible, Wince 使用.NET Compact Framework进行蓝牙(Bluetooth)开发 之 32feet.NET
  10. Java私人学习笔记——第2章 数据类型和运算符
  11. 微软MVP总结的Windows XP优化大全
  12. flash 怎么擦掉fpga_升级固件写FLASH如何避免让FPGA发生意外?
  13. Duplicate entry '' for key 'username'
  14. php cryptojs解密,CryptoJS加密Go解密
  15. CAD .Net 开发-快速入门
  16. 双缓冲技术解决java游戏图片闪现问题
  17. 你的代码会说话吗?(下)
  18. Win10家庭版实现远程桌面 RDPWraper -解决not supported ,not listening问题
  19. 宇视NVR如何使用RTSP协议添加相机
  20. 无线网络技术——星链——三两问

热门文章

  1. 《惢客创业日记》2018.11.30(周五)凉粉儿疯了!
  2. 2022什么蓝牙耳机好用?适合618入手的无线蓝牙耳机推荐
  3. 有了它们就能更好的理解webpack了
  4. Metro UI配色方案
  5. 好用的手机Web网站开发工具:Mobirise for Mac
  6. NP理论(2):“判定问题”与“停机问题” 精选
  7. 系统管理员对于宝贝的搜索引警
  8. 公益电子书—成功学专题
  9. Redis利用方式总结(Linux/Windows)
  10. CyclicBarrier源码分析