工具类
一、时间
二、等待
三、随机数
四、数学
五、四元数
一、时间
- 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);
}
}
二、等待
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);
}
}
四、数学
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)完成旋转过程。