Unity中常用Mathf函数归纳

目录

Math和Mathf的区别

1.Mathf.Clamp 限制

2.Mathf.Clamp01 限制0~1

3.Mathf.Lerp 插值

4.Mathf.Pow 次方

5.Mathf.Sqrt 平方根

6.Mathf.Abs 绝对值

7.Mathf.Max 最大值(Mathf.Min 最小值同理)

8.Mathf.Round 四舍五入

9.Mathf.Ceil 向上取整

10.Mathf.Floor 向下取整

11.Mathf.MoveTowards 均匀平移

12.Mathf.Repeat 重复

13.Mathf.PingPong  乒乓(来回移动)

14.弧度制Deg2Rad


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;

猜你喜欢

转载自blog.csdn.net/knight209208/article/details/128925158
今日推荐