工具类

一、时间

二、等待

三、随机数

四、数学

五、四元数

 

一、时间

  • Time.time:从游戏开始后开始计时,表示截止目前共运行的游戏时间。
  • Time.deltaTime:获取Update()方法中完成上一帧所消耗的时间。
  • Time.fixedTime:FixedUpdate()方法中固定消耗的时间总和。FixedUpdate()每一帧更新的时间可通过导航菜单栏“Edit”==>“Project Settings”==>“Time” 菜单项去设置。
  • Time.fixedDeltaTime:固定更新上一帧所消耗的时间。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class E4_09Time : MonoBehaviour {

	void OnGUI()
    {
        GUILayout.Label("当前游戏时间:"+Time.time);
        GUILayout.Label("上一帧所消耗的时间:" + Time.deltaTime);
        GUILayout.Label("固定增量时间:" + Time.fixedTime);
        GUILayout.Label("上一帧所消耗的固定时间:" + Time.fixedDeltaTime);
    }
}

unity各类继承关系_unity各类继承关系

二、等待

WaitForSeconds()方法可以 以秒为单位 让程序(主线程)等待一段时间。该方法的返回值为 IEnumerator 类型,在需要的地方调用 yield return WaitForSeconds()

示例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class E4_09Wait : MonoBehaviour {

	IEnumerator Start()
    {
        Debug.Log("开始等待:"+Time.time);
        yield return new WaitForSeconds(2);
        Debug.Log("结束等待:"+Time.time);
    }

}

如果在某个方法中执行等待事件,那么在调用它的方法中同样要添加 IEnumerator 作为方法的返回类型,并在调用的方法中执行return方法。如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class E4_09Wait : MonoBehaviour {

	IEnumerator Start()
    {
        //等待
        return Test();
    }

    //返回等待时间
    IEnumerator Test()
    {
        Debug.Log("开始等待:"+Time.time);
        yield return new WaitForSeconds(2);
        Debug.Log("结束等待:"+Time.time);
    }
}

注:一定要将WaitForSeconds()方法的返回类型修改为 IEnumerator ,否则无法实现等待。

三、随机数

Random.Range()方法:两个参数,第一个为随机数的起始位置,第二个为结束位置。返回值 取左不取右

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class E4_09Random : MonoBehaviour {

	void Start () {
        int a = Random.Range(0,100);
        float b = Random.Range(0.0f,10.0f);

        Debug.Log("获取一个0-100之间的整形随机数:"+ a);
        Debug.Log("获取一个0.0-10.0之间的浮点型随机数:" + b);
	}
}

unity各类继承关系_随机数_02

 

四、数学

Mathf类的一些常用数学方法:

  • Mathf.Abs(int i):返回一个绝对值,整形或者浮点型。
  • Mathf.Clamp(int num, int min, int max):返回一个限值数,num值在min和max之间则返回num值,小于min返回min值,大于max返回max值。
  • Mathf.Lerp(float start, float end, Time.time):插入值,参数与start为开始值,end为结束值,Time.time为消耗的时间。该方法常用于物体的平移。(下面Quaternion.Slerp()方法常用于旋转)
  • Mathf.Sin(4):返回正弦值。
  • Mathf.Cos(4):返回余弦值。
  • Mathf.Tan(4):返回正切值。
  • Mathf.Max(2, 44):返回两个数的最大值
  • Mathf.Min(2, 44):返回两个数的最小值
  • Mathf.PI:圆周率

 

五、四元数

unity中所有用到模型旋转的,其底层都是有四元数实现的,它可以精确计算模型旋转的角度。

示例:

  • Quaternion.Euler()方法:返回一个旋转的四元数,该方法的三个参数为旋转的三维坐标。 执行该方法后,将四元数赋值给立方体旋转对象的旋转变量,即可在一帧内完成旋转。若想在一段时间内完成旋转,就要用Quaternion.Slerp()进行插值旋转。
  • Quaternion.Slerp()方法:第一个参数为旋转起始角度,第二个参函数为结束角度,第三个为旋转共消耗的时间[0, 1]。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class E4_09Math : MonoBehaviour {
    
    bool isRotation = false;    //是否开始差值旋转

    void OnGUI()
    {
        if(GUILayout.Button("旋转固定角度",GUILayout.Height(50)))
        {
            gameObject.transform.rotation = Quaternion.Euler(0.0f,50.0f,0.0f);
        }
        if (GUILayout.Button("插值旋转固定角度", GUILayout.Height(50)))
        {
            isRotation = true;
        }
    }
    void Update()
    {
        if(isRotation)
        {
            gameObject.transform.rotation = 
                Quaternion.Slerp(gameObject.transform.rotation, 
                Quaternion.Euler(0.0f, 50.0f, 0.0f),Time.deltaTime*2.5f);
        }
    }
}

点击“旋转固定角度”将在一帧内完成旋转

点击“插值旋转固定角度”将在设定的时间(如上面代码中:Time.time*0.1f)完成旋转过程。

unity各类继承关系_随机数_03