Transform类

在unity中,把transform类理解为,transform类是在每个对象生成时自动附加的一个类。在Unity的视图中,点击Hierarchy中的对象,就可以在Inspector中可以看到存在Transform的组件。

属性

  • Position(坐标)
  • Rotation(旋转)
  • Scale(缩放)

脚本中类中的方法就是对它们的改变。 而我们也可以在Scene中和Inspector中直接进行设置。

修改属性

修改 Position

var pos =transform.position;
transform.position.x;
transform.position.y;
transform.position.z;
transform.position = new Vector3(1f,1f,1f);

修改Rotation

transform.localEulerAngles.x;
transform.localEulerAngles.y;
transform.localEulerAngles.z;

transform.localEulerAngles = new Vector3(90f,0,0);
rotation = new Rotation(x,y,z,w);

//修改2:
//如果物体面板Rotation (x=22.5,y=0,z=0)
//用代码实现方法:
transform.Rotate(22.5f,0,0);

修改Scale, 缩放,没有本地和世界分别

transform.localScale.x;
transform.localScale.y;
transform.localScale.z;

transform.localScale = new Vector3(1f,1f,1f);

在Unity中不能对transform.position.x/y/z直接赋值的原因

  1. Vector3是一个结构体,而position是一个自动实现的属性。
  2. 在C#里,结构体是值类型的,值类型在通过方法传递的时候,所传递的只是值的副本。C#的属性可以说是两个分别名为get和set的方法
  3. 当我们写出形如 transform.position.x = 1 这样的代码时,是在通过get方法得到position,然后修改position的x字段的值。
  4. 由于position是结构体类型的,get得到的也只是position的一个副本,而对这个副本所作出的任何修改,都对原positon没有任何影响,因此这样的修改是毫无意义的。

坐标系

A本地坐标 + A父物体世界坐标 = A在上一级节点的相对坐标 A本地坐标 + A父物体世界坐标 = 是以父物体为原点的坐标系中的坐标

本地坐标

  • 是相对于父亲节点的坐标系
  • 本地都是对于根物体
  • 通俗的讲,u3d可以把多个物体算成一个物体(父物体),而他的子物体就需要本地坐标系做了,就是参考父物体世界坐标+偏移

世界坐标

场景所有物体的位置以世界坐标(0,0,0)为原地的坐标系

欧拉角

  • 欧拉角由三个数字组成,每个数字代表环绕一个坐标轴旋转的角度。
  • 它把一个转动分解成三个方向的转源动,可以用三个欧拉角表示一个转百动 R( θ度1, θ2, θ3 )。其中的θ1, θ2, θ3就是普通的角度,但是我们管知它们叫欧拉角。
  • 围绕X轴旋转,即相当于翻滚机身(Roll)。横滚角
  • 围绕Y轴旋转,即相当于机身俯仰(Pitch)。俯仰角
  • 围绕Z轴旋转,即决定飞机头指向的方向,又叫偏航(Yaw)。导航角
  • 欧拉角是一种旋转方式,例如要把物体旋转到某个方向,可以通过多种旋转方式达成:第一种方式我们可以称它为围绕Y轴的旋转:[Y],第二种是旋转:[Z, X’],第三种是旋转:[X, Z’]。
  • 欧拉角背后的基本概念。你可以使用不同的方式得到同一个旋转——通过不同的转轴或者不同的旋转顺序。
  • Unity3d 通过[z,x,y]旋转,先绕z轴一个小角度,然后x轴小角度,然后y轴;按轴顺序重复绕,渐进达到最终姿态.
  • 欧拉角按照旋转次序的不同被规定为十二种顺序:X‐Z‐X, X‐Y‐X, Y‐X‐Y, Y‐Z‐Y, Z‐Y‐Z, Z‐X‐Z, X‐Z‐Y, X‐Y‐Z, Y‐X‐Z, Y‐Z‐X, Z‐Y‐X, Z‐X‐Y。
  • 欧拉表示有个致命的弱点,就是万向节死锁

跟欧拉角有关的函数

Quaternion.Euler 基本语法:

(1)public static Quaternion Euler(Vector3 euler);
(2)public static Quaternion Euler(float x, float y, float z);

功能说明:此方法用于返回欧拉角Vector3(x,y,z)对应的四元数Quaternion实例。

四元数Quaternion(qx,qy,qz,qw)与其欧拉角eulerAngles(ex,ey,ez)之间的对应关系如下。

--完--