目录
7.Mathf.Max 最大值(Mathf.Min 最小值同理)
Math和Mathf的区别
Math是C#官方提供的数学计算的工具类,而Mathf是Unity提供的数学计算结构体。
Mathf中包含了几乎所有Math中的数学计算方法,同时还额外添加了一些适用于游戏开发的数学计算方法。
1.Mathf.Clamp 限制
Mathf.Clamp (value, min, max) ;
把value的值限定在min和max间。如果value小于min,返回min; 如果value大于max,返回max;否则返回value。
2.Mathf.Clamp01 限制0~1
Mathf.Clamp01(float value);
把value的值限定在0和1之间并返回value。如果value小于0,返回0。如果value大于1,返回1;否则返回value。
3.Mathf.Lerp 插值
Mathf.Lerp(float a, float b, float t);
数学公式:result = a + (b - a)*t;其中t为插值系数,取值范围0~1;
当t = 0返回a,当t = 1 返回b。当t = 0.5 返回a和b的平均值。
4.Mathf.Pow 次方
Mathf.Pow(float a, float b);
返回a的b次方。
5.Mathf.Sqrt 平方根
Mathf.Sqrt(float a);
返回a的平方根(开根号)。
6.Mathf.Abs 绝对值
Mathf.Abs(a);
返回a的绝对值。
7.Mathf.Max 最大值(Mathf.Min 最小值同理)
Mathf.Max (float a,float b);
Mathf.Max (values[]) ;
返回两个或更多值中最大的值。
8.Mathf.Round 四舍五入
Mathf.Round (float a);
PS:与Math函数的传两个参数不同,此函数只能四舍五入取整,不能设置精度保留位数。
9.Mathf.Ceil 向上取整
Mathf.Ceil(float a);
返回大于或等于a的最小整数。例如1.1返回2;-1.1返回-1。
10.Mathf.Floor 向下取整
Mathf.Floor(float a);
返回小于或等于a的最大整数。例如1.6返回1;-1.6返回-2。
11.Mathf.MoveTowards 均匀平移
Mathf.MoveTowards(float current, float target, float maxDelta);
Mathf.MoveTowards方法的功能是返回一个浮点数,其值为current向target靠近的一个值。靠近多少的值由maxDelta决定。
PS:
- 若maxDelta < 0,则返回的浮点数将从current开始远离target;
- 若maxDelta >= target,由于返回的浮点数最大只能为target,故返回的浮点数为target;
例如:a = Mathf.MoveTowards(a, 20, 3); 若 a 的初始值为0,运行一次a的值变为3,再运行一次变为6,再运行一次变为9,直至20停止。
12.Mathf.Repeat 重复
Mathf.Repeat(float t,float length);
循环值t,使输出小于length,并且大于等于0,即取值在 [ 0,length ) 之间。
for (int i = 0; i < 9; i++)
{
Debug.Log(Mathf.Repeat(i, 3));
}//输入123456789,输出012012012
13.Mathf.PingPong 乒乓(来回移动)
Mathf.PingPong(float t,float length);
循环值t,使输出大于等于0,小于等于length。返回值将在 [ 0,lenght ] 之间来回移动。
for (int i = 0; i < 9; i++)
{
Debug.Log(Mathf.PingPong(i, 3));
}//输入123456789,输出012321012
14.弧度制Deg2Rad
通常数学中计算的正弦值:Sin30°=1/2;Sin(π/6)=1/2;
此时要注意数学中计算通常按照弧度去计算的,也就是 π/6 这种形式;(Sin30 与 Sin30°是不一样的),但是C#语言必然是没有“°”度符号的,所以整角尚且可以用
Mathf.Sin(Mathf.PI/6); 这种形式,可以输出0.5.
但是非整角呢,Unity中在制作敌人AI,第一人称相机跟随时常常会遇到角度变量这个问题。
57.3度 = 1弧度 * 360°/(PI*2)
0.017453弧度 = 1度 * (PI*2)/360°
Mathf.Deg2Rad=(PI*2)/360 ---------度转弧度
Mathf.Rad2Deg=360/(PI*2) ---------弧度转为度
即:
弧度数 = 角度数 * Mathf.Deg2Rad
角度数 = 弧度数 * Mathf.Rad2Deg
所以假设我们要求Sin38°,我们可以这样表示:
Mathf.Sin(38*Mathf.Deg2Rad) ; 输出结果为0.6156615;