三、Unity3D中的Vector3、Transform和Time

1、Vector3

首先声明:Unity中点和向量都用Vector3表示!

再来看其是如何定义的:

三、Unity3D中的Vector3、Transform和Time_第1张图片

由上图可知Vector3是个struct(结构体),有 x , y , z 3个坐标!

Vector3“.”出的常见东西

  • Vector3.forward:(0, 0, 1)
  • Vector3.back:(0, 0, -1)
  • Vector3.up:(0, 1, 0)
  • Vector3.down:(0, -1, 0)
  • Vector3.right:(1, 0, 0)
  • Vector3.left:(-1, 0, 0)

两点间距离

float distance = Vector3.Distance( point1, point2 );

单位向量(Vector3对象.normalize()与Vector3.Normalize()的区别)

void Start(){
    Vector3 v = new Vector3(4,5,6);
    Vector3 r;
    r = Vector3.Normalize(v);//将v向量的单位向量赋给向量r(v本身没有变)
    Debug.Log("v"+ v);
    v.Normalize();//将v向量本身单位化
    Debug.Log("v"+ v);
    Debug.Log("r"+ r);
    }

打印如下

三、Unity3D中的Vector3、Transform和Time_第2张图片

线性插值
Vector3.Lerp(Vector3 from , Vector3 to , float t)
会返回一个当前位置的Vector3
from : 起点
to : 终点
t : 百分比
例如:
t=0.1时表示 每帧会从起点向终点移动当前相差距离的10%(即从快到慢的速度移动)
注:线性插值会使得移动更平滑

2、Transform

Transform与transform的区别:

Transform泛指所有游戏对象的基本组件,也是一个基础类!
transform则是Transform这个类所创建的对象,亦是指当前对象的Transform组件!

transform“.”出的常见东西

  • 属性:

    • transform.forward
    • transform.up
    • transform.right
      注:并没有.back、.down、.left什么的!
  • 移动:

    • transform.Translate(x , y , z);//朝向量(x , y , z)的方向移动,向量的长度就是移动速度!
    • int moveSpeed = 10;//也可指定速度
      transform.Translate( (new Vector3(x, y, z))* moveSpeed );
    • transform.Translate( Vector3.forward , Space.Self );
      transform.Translate( transform.forward, Space.World );
      //这两个虽然都是朝物体正前方移动,但是第一个方法中第一个参数Vector3.forward是绝对向量(绝对方向和绝对大小),默认是自身坐标空间中的向量!第二个参数默认是Space.self(物体坐标系)。
      第二个方法终点transform.forward则是物体本身的前方(物体坐标系),描述的是这个物体坐标系中的向量在世界坐标系中的向量!第二个参数必须是Space.World(世界坐标系) !
  • 旋转

    • transform.Rotate( 0, 0.5f, 0 );//绕着自身的某个轴旋转
    • transform.RotateAround( Vector3.Zero, Vector3.Up, 0.5f );//绕着特定的某个轴旋转,绕原点朝上的方向进行旋转,每次旋转0.5度。
  • 缩放

    • transform.localScale
  • 朝向

    • transform.LookAt()
  • 位置

    • transform.position//在世界坐标系中的位置
    • transform.localPosition//相对于父物体的位置
  • 作用
    • transform.childCount//获取子物体的数量
    • transform.GetChild( index );//根据索引取得子物体

3、Time
Time是一个只读属性的类

只读

Time”.”出的东西

  • Time.deltaTime//距离上一帧所经历的时间
  • Time.time//从游戏开始到你调用的时候所经历的时间
  • Time.fixedDelTime//固定更新时间
  • Time.fixedTime//固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。
  • Time.smoothDeltime//平滑的deltaTime
  • Time.frameCount//从游戏开始到目前所经历的帧数(可计算平均帧率=frameCount/time)
  • Time.timeScale//时间缩放,默认是1(设为0是暂停,1.2相当于加快了游戏速度)
  • Time.realTimeSinceStartUp//不受timeScale影响

    可通过下面代码在运行窗口中显示

void OnGUI()
{
    GUILayout.Label("deltaTime:" + Time.deltaTime);
}

还可用来规避不同设备帧率的问题:
假设:
速度快的设备:1S跑10帧 Time.deltaTime为0.1
速度慢的设备:1S跑1帧 Time.deltaTime为1
则移动距离=5m/帧(移动速度)*Time.deltaTime(距离上一帧的时间)
速度快的和速度慢的设备在1S内移动的距离都为:5m
5 * 0.1 * 10
5 * 1 * 1

你可能感兴趣的:(U3D)