目录
Transform类
该类表示的是对象的位置、旋转和缩放。
Properties
Transform.parent
public Transform parent;
让一个游戏物体成为另一游戏物体的子对象,那么该物体的 位置、缩放、旋转会受到父对象的位置、缩放、旋转的影响。
void Start() { var tran = GameObject.Find("Sphere").transform; gameObject.transform.parent = tran; // 让当前脚本所在游戏对象成为 Sphere 的子对象 }
Public Methods
Transform.Translate
public void Translate(Vector3 translation); public void Translate(Vector3 translation, Space relativeTo = Space.Self);
- 沿着 translation 的方向移动 | translation | 的距离,其结果将应用到 relativeTo 坐标系中。
- 如果relativeTo为空 或设置为 Space.Self,则该 transform 则相对于自身的局部坐标轴进行移动。
- 如果relativeTo是Space.World,则该transform是相对于世界坐标系进行移动。
public void Translate(float x, float y, float z); public void Translate(float x, float y, float z, Space relativeTo = Space.Self);
- 通过参数 x、y、z 沿着transform 的 x、y、z 轴进行移动
- 如果将 relativeTo 省略或设置为Space.Self,则该 transform 则相对于自身的局部坐标轴进行移动。(在场景视图中选择对象时显示的x,y和z轴)
- 如果relativeTo是Space.World,则该transform是相对于世界坐标系进行移动。
public void Translate(Vector3 translation, Transform relativeTo);
- 移动 transform 在translation的方向和距离上。
- 默认情况下,那么它是相对于 relativeTo 的局部坐标系进行移动。
- 如果
relativeTo
是 null ,那么是相对于 relativeTo 的世界坐标系进行移动。public void Translate(float x, float y, float z, Transform relativeTo);
- 通过参数 x、y、z 沿着transform 的 x、y、z 轴进行移动
- 默认情况下,那么它是相对于 relativeTo 的局部坐标系进行移动。
- 如果
relativeTo
是 null ,那么是相对于 relativeTo 的世界坐标系进行移动。
Transform.Find
public Transform Find(string n);
n 需要查找的名字
- 通常 参数 n 提供的名字进行查找。 如果没有找到, 则返回 null。
- 如果 n 包含 '/',它将像路径名一样访问层次结构中的Transform。
- 该操作必须在当前脚本所在的对象或者是获得某个对象的引用查找该对象的直接子对象(激活不激活都可以),不会查找到其它对象的同名直接子对象。
- 该操作不会在整个场景中搜索。
Transform.Rotate:
public void Rotate(Vector3 eulers, Space relativeTo = Space.Self); public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self);
- 使用 Transform.Rotate 以各种方式旋转 GameObjects。 第一个参数需要提供的是欧拉角 而不是 四元数。 第二个参数指示出你可以在世界坐标系 还是 物体坐标系中旋转。 默认情况下,是 按物体坐标系进行旋转的。
- 此方法的功能是使得 transform 的实例在相对参数 relativeTo 的坐标系中旋转欧拉角eulerAngles。
public void Rotate(Vector3 axis, float angle, Space relativeTo = Space.Self);
- 其中参数 axis 为旋转轴方向, 参数 angle 为旋转角度, 参数 relativeTo 为参考坐标系, 默认为Space.self.
- 此方法的功能是使得 Gameobject 对象在 relativeTo 坐标系中绕轴向量 axis 旋转 angle 度。若想使Gameobject对象实例绕着某个物体旋转, 请用Transform.RotateAround
Public Methods
全局坐标系 和 局部坐标系 之间的相互转换
Transform.Translate
public void Translate(Vector3 translation); public void Translate(Vector3 translation, Space relativeTo = Space.Self);
- 沿着 translation 的方向移动 | translation | 的距离,其结果将应用到 relativeTo 坐标系中。
- 如果relativeTo为空 或设置为 Space.Self,则该 transform 则相对于自身的局部坐标轴进行移动。
- 如果relativeTo是Space.World,则该transform是相对于世界坐标系进行移动。
可以通过以下操作来进行 全局坐标系 和 局部坐标系 之间的转换:
Transform.TransformPoint: ( 局部 ——》 全局)
public Vector3 TransformPoint(Vector3 position);
- 将一个坐标点从局部坐标系转换到全局(世界)坐标系。
- 请注意,返回的位置会受 scale 影响。 如果要处理方向,请使用 Transform.TransformDirection。
public Vector3 TransformPoint(float x, float y, float z);
- 将位置x、y、z从局部空间转换为世界空间。
Transform.InverseTransformPoint:(全局——》 局部)
public Vector3 InverseTransformPoint(Vector3 position);
- 将某个坐标点从 全局(世界)坐标系转换到局部坐标系。
- 此函数基本上与Transform.TransformPoint相反,后者用于从局部坐标系转换到全局(世界)坐标系。
- 请注意,返回的位置会受 scale 影响。 如果要处理方向,请使用 Transform.InverseTransformDirection
public Vector3 InverseTransformPoint(float x, float y, float z);
- 将某x、y、z 表示的坐标点从 全局(世界)坐标系转换到局部坐标系。
Transform.TransformDirection:( 局部 ——》 全局)
public Vector3 TransformDirection(Vector3 direction);
- 将一个方向从局部坐标系转换到全局坐标系。
- 此操作不受transform 的 scale 或 position 的影响。返回的向量与 direction 有同样的长度。
public Vector3 TransformDirection(float x, float y, float z);
- 将 x、y、z方向从局部空间转换为世界空间。
Transform.InverseTransformDirection (全局——》 局部)
public Vector3 InverseTransformDirection(Vector3 direction);
- 将一个方向从全局坐标系转换到局部坐标系。
- 和 Transform.TransformDirection 相反。
- 此操作不受 scale 影响。
- 如果vector 表示的是空间中的某一个位置而不是方向,则应使用 Transform.InverseTransformPoint
public Vector3 InverseTransformDirection(float x, float y, float z);
- 将某个方向的 x, y, z从世界空间变换到局部空间。
Transform.TransformVector (局部 ——》 全局)
public Vector3 TransformVector(Vector3 vector);
- 将一个向量从局部坐标系转换到全局坐标系。
- 此操作不受 transform 位置的影响,但受 scale 影响。 返回的新向量可能与原向量不同的长度。
public Vector3 TransformVector(float x, float y, float z);
- 将向量 x, y, z从局部空间变换到世界空间。
Transform.InverseTransformVector (全局 ——》局部)
public Vector3 InverseTransformVector(Vector3 vector);
- 将一个向量从全局坐标系转换到局部坐标系。
- 是与 Transform.TransformVector. 相反的。
- 此操作受 scale 影响。
public Vector3 InverseTransformVector(float x, float y, float z);
- 一个向量(x, y, z)从世界坐标空间到局部坐标空间。这个操作与Transform.TransformVector相反。
- 此操作受 scale 影响。
Transform.forward, Transform.right, Transform.up:
- 当前物体的物体坐标系的z轴,x轴,y轴在世界坐标系上的指向。
- Vector3.forward ,(0,0,1)的缩写在 transform.Translate() 中使用时,如果不表明坐标系,则为物体的局部坐标,即物体自身的正前方。
- Vector3.right,(1,0,0)的缩写。 Vector3.up ,(0,1,0)的缩写。
屏幕坐标系与全局坐标系之间的相互转换
Camera.ScreenToWorldPoint
public Vector3 ScreenToWorldPoint(Vector3 position);
- 将屏幕坐标转换为世界坐标。
- 屏幕空间的坐标是以像素来表示的。屏幕左下角为(0,0); 右上角是 ( pixelWidth,pixelHeight ).
- z的 位置是以世界单位衡量的到 Camera 的距离。
Camera.WorldToScreenPoint
public Vector3 WorldToScreenPoint(Vector3 position); public Vector3 WorldToScreenPoint(Vector3 position, Camera.MonoOrStereoscopicEye eye);
- 将全局坐标转换为屏幕坐标。
- 屏幕空间的坐标是以像素来表示的。屏幕左下角为(0,0); 右上角是 ( pixelWidth,pixelHeight ).
- z的 位置是以世界单位衡量的到 Camera 的距离。
Input.mousePosition:
public static Vector3 mousePosition;
- 获得鼠标在屏幕坐标系中的坐标(只读),它是以像素为单位的。
- 屏幕或窗口的左下角是(0,0)。 屏幕或窗口的右上角位于(Screen.width,Screen.height)。
- 注意:即使鼠标不在 Game 视图中,也会返回鼠标的位置,例如,即使当 Cursor.lockState 设置为 CursorLockMode.None时也是如此。当以窗口模式运行且光标未被限制时,小于0或大于屏幕尺寸(Screen.width,Screen.height)的位置值表示鼠标光标在游戏窗口之外。
屏幕坐标系与视口坐标系之间的相互转换
Camera.ScreenToViewportPoint
public Vector3 ScreenToViewportPoint(Vector3 position);
- 将屏幕坐标转换为视口坐标。
- 屏幕坐标的坐标是以像素来表示的。屏幕左下角为(0,0); 右上角是 ( pixelWidth,pixelHeight ).
- z的 位置是以世界单位衡量的到 Camera 的距离。
Camera.ViewportToScreenPoint
public Vector3 ViewportToScreenPoint(Vector3 position);
- 将视口坐标转换为屏幕坐标
- 视口坐标是相对于Camera 的 normalized 的。Camera 的左下角是(0,0); 右上角是(1,1)。
- z 的 位置是以世界单位衡量的到 Camera 的距离。
全局坐标系与视口坐标系 之间的相互转换
Camera.WorldToViewportPoint
public Vector3 WorldToViewportPoint(Vector3 position); public Vector3 WorldToViewportPoint(Vector3 position, Camera.MonoOrStereoscopicEye eye);
- 将全局坐标转换为视口坐标
- 视口坐标是相对于Camera 的 normalized 的。Camera 的左下角是(0,0); 右上角是(1,1)。
- z 的 位置是以世界单位衡量的到 Camera 的距离。
Camera.ViewportToWorldPoint
public Vector3 ViewportToWorldPoint(Vector3 position);
- 将视口坐标转换为全局坐标。
- 视口坐标是相对于Camera 的 normalized 的。Camera 的左下角是(0,0); 右上角是(1,1)。
- z 的 位置是以世界单位衡量的到 Camera 的距离。
- 请注意,ViewportToWorldPoint 将x-y屏幕位置转换为3D空间中的x-y-z位置。
Transform.LookAt
public void LookAt(Transform target); public void LookAt(Transform target, Vector3 worldUp = Vector3.up);
target 要指向的对象 worldUp Vector 指定向上的方向。 旋转 transform,使向前的向量指向/ target /的当前位置。简单说,旋转物体使z轴指向目标物体。
当该物体设置了LookAt并指定了目标物体时,该物体的z轴将始终指向目标物体,在设置了worldUp轴向时,该物体在更接近指定的轴向使旋转便的灵活,注意worldUp指的是世界空间,不论你物体在什么位置,只要接近指定的轴方向,旋转会变的更灵活。
Transform.localPosition:
public Vector3 localPosition;
- 可以通过 transform.localPosition 取得一个物体在其父物体的局部坐标系中的坐标
- 如果该游戏物体没有父物体,那么 transform.localPosition 获得的依然是该物体在全局坐标系中的坐标。
- 如果该物体有父物体,则获得是在其父物体的局部坐标系中的坐标。此时 检视视图中显示的为 localPosition 的值。
Transform.SetParent
public void SetParent(Transform p); public void SetParent(Transform parent, bool worldPositionStays);
- 将 游戏对象 P 的 transform 变成 当前对象的父对象。
- 第二个参数,如果没有 或者 为 true时, 它与 Transform.Parent 效果是一样的,即 当前对象 的transform 会变成其 父对象的局部坐标系中的坐标。
- 如果第二个参数为false, 那么当前游戏对象还是会变成 P 的 子对象, 但是其坐标不再是相对于父对象的局部坐标。 而是其自身世界坐标位置 (意思就是说,虽然变成了子对象,但是坐标并没有被改变)。