带你使用最常用的Mathf函数

一、Math和Mathf的区别:
Math是C#官方提供的数学计算的工具类,而Mathf是Unity提供的数学计算结构体。Mathf中包含了几乎所有Math中的数学计算方法,同时还额外添加了一些适用于游戏开发的数学计算方法。

二、Mathf的一些常用函数:

0.Mathf.CeilToInt:

返回最小的整数大于或等于f。

// Prints 10 Debug.Log(Mathf.CeilToInt(10.0));

// Prints 11 Debug.Log(Mathf.CeilToInt(10.2));

// Prints 11 Debug.Log(Mathf.CeilToInt(10.7));

 // Prints -10 Debug.Log(Mathf.CeilToInt(-10.0));

// Prints -10 Debug.Log(Mathf.CeilToInt(-10.2));

// Prints -10 Debug.Log(Mathf.CeilToInt(-10.7));
 

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

猜你喜欢

转载自blog.csdn.net/MONOJP/article/details/140273471