Transform组件

xiaoxiao2021-02-28  48

物体的位置、旋转和比例。

一、Variables

1、世界坐标系中的位置

public Vector3 position;

2、父对象局部坐标系中的位置

public Vector3 localPosition;

注:1)如果transform没有父对象,则transform.position = transform.localPosition;

       2)编辑器上的Position = transform.localPosition。

3、世界坐标系中以欧拉角表示的旋转

eulerAngles

例:transform.eulerAngles = new Vector3(10,10,0);

使用Ramdom.Range(0,360);随机旋转

注 :避免单独设置一个欧拉角轴,因为这将导致偏移和不期望的旋转。eulerAngles.x = 10。

4、父对象局部坐标系中的欧拉角

localEulerAngles

5、对象在世界坐标系中的上方向 (0,1,0)

public Vector3 up;

6、对象在世界坐标系中的右方向(1,0,0)

public Vector3.right;

7、对象在世界坐标系中的前方向 (0,0,1)

public Vector3 forward;

注:编辑器中红:x轴;绿:y轴;蓝:z轴。

8、世界坐标系中以四元数表示的旋转

public Quaternion rotation;

注:Quaternion.identity 代表“无旋转”,对象与世界或父对象完全一致。

例:transform.rotation = Quaternion.identity;

9、父对象局部坐标系中以四元数表示的旋转

public  Quaternion localRotation;

注:编辑器上,transform组件上的Rotation即为eulerAngles.

10、父对象局部坐标系中的缩放比例

public Vector3 localScale;

例:transform.localScale +=  new Vector3(0.1f,0,0); //在x轴上扩大物体0.1个单位。

注:编辑器上,transform组件上的Scale即为localScale。

11、父对象的transform组件

public Transform parent;

注:若没有父对象,则返回null。

12、对象层级关系中根对象的Transform组件

public Transform root;

注:若没有父对象,则返回自身。

parent和root类比目录,root是根目录,parent是父目录。

13、世界坐标系到局部坐标系的变换矩阵(只读)

worldToLocalMatrix

public Matrix4x4 worldToLocalMatrix;

Matrix4x4::一个标准的4x4变换矩阵。

注:如果设置了Shader参数,必须使用Renderer.worldToLocalMatrix替代。[图形学:矩阵变换]

14、局部坐标系到世界坐标系的变换矩阵(只读)

localToWorldMatrix

public Matrix4x4 localToWorldMatrix;

注:如果设置了Shader参数,必须使用Renderer.localToWorldMatrix替代。

15、子孙对象的数量

public int childCount;

注:可用于判断一个物体下是否有子物体。

16、全局缩放比例(只读)[有损缩放]

public Vector3 lossyScale;

注:如果有一个带有缩放的父变换和有任意旋转的子变换,此缩放将有偏差。因此缩放不能正确的表示在3组件的向量,而是一个3x3的矩阵。

二、Public Function

1、按指定的方向和距离平移

public void Translate(Vector3 translation,space relativeTo = Space.Self);

Space:用于操作的坐标空间

Space.World:应用于世界坐标系中的转换。

Space.Self:应用于局部坐标系中的转换。

public void Translate(float x,float y,float z,Space relativeTo = Space.Self);

public void Translate(Vector3 translation,Transform relativeTo);

public void Translate(float x,float y,float z,Transform relativeTo);

2、按指定的欧拉角旋转

public void Rotate(Vector3 eulerAngles,Space relativeTo = Space.Self);

public void Rotate(float xAngle,float yAngle,float zAngle,Space relativeTo = Space.Self);

public void Rotate(Vector3 axis,float angle,Space relativeTo = Space.Self);

3、按给定旋转轴和旋转角度进行旋转

public void RotateAround(Vector3 point,Vector3 axis,float angle);

例:transform.RotateAround(Vector3.zero,Vector3.up,20*Time.deltaTime);

4、旋转使得自身的前方向指向目标的位置

public void LookAt(Transform target,Vvector3 worldUp = Vector3.up);

public void LookAt(Vector3 worldPosition,Vector3 worldUp = Vector3.up);

注:z轴指向target,y轴方向最大限度地指向worldUp方向。

    通常被用在Camera上,使得Camera的forward看向目标target。

    默认worldUp = Vector3.up。

5、将一个位置从局部坐标系变换到世界坐标系

public Vector3 TransformPoint(Vector3 position);

public Vector3 TransformPoint(float x,float y,float z);

6、将一个位置从世界坐标系变换到局部坐标系

public Vector3 InverseTransformPoint(Vector3 position);

public Vector3 InverseTransformPoint(float x,float y,float z);

7、将一个方向从局部坐标系变换为世界坐标系

public Vector3 TransformDiretion(Vector3 direction);

public Vector3 TransformDirection(float x,float y,float z);

例:Vector3 world_v = transform.TransformDirection(local_v);

与TransformPoint的区别:转换后的向量world_v只与transform的Rotation和向量local_v有关,而与transform的Position和Scale值无关。

8、将一个方向从世界坐标系变换为局部坐标系

public Vector3 InverseTransformDirection(Vector3 direction);

public Vector3 InverseTransformDirection(float x,float y,float z);

9、与所有子物体接触父子关系

public void DetachChildren();

transform.DetachChildren(); Destory(gameObejct); 10、按名称查找子对象

public Transform Find(string name);

11、判断是否是指定对象的子对象

public bool IsChildOf(Transform parent);

转载请注明原文地址: https://www.6miu.com/read-78923.html

最新回复(0)