Mathf类

Mathf类还是有比较多的东东,今天花时间看了一下,记录如下

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

//Mathf类的静态变量和静态方法
public class MathfTest : MonoBehaviour {

//// Use this for initialization
void Start()
{
    //静态变量
    Debug.Log("角度变弧度:" + Mathf.Deg2Rad);
    Debug.Log("弧度变角度:" + Mathf.Rad2Deg);
    Debug.Log("圆周率:" + Mathf.PI);
    Debug.Log("无限小的小数(正数):" + Mathf.Epsilon);
    Debug.Log("无限大的数(正数):" + Mathf.Infinity);
    Debug.Log("无限小的数(负数)" + Mathf.NegativeInfinity);

    //静态方法
    Debug.Log("返回参数的符号,正数和0返回1,负数返回-1:"+Mathf.Sign(-10)+":::"+Mathf.Sign(10));
    Debug.Log("求绝对值:" + Mathf.Abs(-10));  //print 10 
    Debug.Log("五舍六入(float类型):"+Mathf.Round(10.5f)+":::"+Mathf.Round(10.6f));
    Debug.Log("五舍六入(int类型):" + Mathf.RoundToInt(-10.5f) + ":::" + Mathf.RoundToInt(-10.6f));
    Debug.Log("比较两个浮点数的相似度:" + Mathf.Approximately(2.0f, 5.0f));  //print true/false
    Debug.Log("向上取整(返回float类型):" + Mathf.Ceil(0.6f));
    Debug.Log("向上取整(返回int类型):" + Mathf.CeilToInt(5.3f));
    Debug.Log("向下取整(返回float类型):" + Mathf.Floor(0.6f));
    Debug.Log("向下取整(返回int类型):" + Mathf.FloorToInt(1.6f));
    Debug.Log("限定方法:" + Mathf.Clamp(5, 10, 12)); //将第一个参数限定在第二个参数和第三个参数之间
    Debug.Log("限定方法01:" + Mathf.Clamp01(0.5f)); //将第一个参数限定在0-1之间
    Debug.Log("返回距离value最近的2的次方数。:" + Mathf.ClosestPowerOfTwo(5)); //此时应该返回4
    Debug.Log("检测是否为2的N次方数:"+Mathf.IsPowerOfTwo(8));  //返回true/false
    Debug.Log("输出下一个最近的2的N次方数:"+Mathf.NextPowerOfTwo(129));
    Debug.Log("计算两个角度的最短距离:" + Mathf.DeltaAngle(1080, 90));  //1080即0度  所以二者之间最短距离为90-0 = 90度
    //对数和次方数
    Debug.Log("计算参数a的b次方:"+Mathf.Pow(6f, 2f));
    Debug.Log("计算平方根:" + Mathf.Sqrt(4));
    Debug.Log("e的N次方:" + Mathf.Exp(6));  //e:自然常数e(约为2.71828)
    Debug.Log("对数运算:" + Mathf.Log(6, 2)); // 以6位底,2的对数
    Debug.Log("对数运算(只有一个参数):" + Mathf.Log(6)); // 当只有一个参数时,默认以e为底
    Debug.Log("以10为底的对数运算:" + Mathf.Log10(100));
    //插值运算部分(先加速后减速运动)
    Debug.Log("反插值(返回参数c在参数ab之间的比例):" + Mathf.InverseLerp(2f, 8f, 5f));  //5在2和8之间的比例为0.5
    Debug.Log("插值(每次返回参数c在参数ab之间的比例值):"+Mathf.Lerp(1f,10f,0.8f));  //print 8.2   (10-1)*0.8 = 7.2+1 = 8.2
    Debug.Log("针对角度的插值运算:" + Mathf.LerpAngle(0.0f,90.0f,0.5f));  ///返回45度
    Debug.Log("线性插值在a和b之间,不受t的限制,可以跳到ab范围的外面去:" + Mathf.LerpUnclamped(0.5f, 9.0f, 1.6f));
    //匀速移动
    Debug.Log("从起点按比例增加一直到终点为止:" + Mathf.MoveTowards(1.0f, 10.0f, 2.0f));  //第一次返回1+2=3
    Debug.Log("角度匀速增加:"+Mathf.MoveTowardsAngle(30.0f,90.0f,10.0f));
    //来回运动
    Debug.Log("参数a在长度之间来回变化"+Mathf.PingPong(1.0f,10.0f));  // 此处参数t在1-10之间来回变化(需要放在update里面)
    Debug.Log("来回循环" + Mathf.Repeat(1.0f, 5.0f));  //在1-5之间来回循环   和Mathf.PingPong的差异 暂时不清楚

    //Perlin Noise的特点是:返回值随着x,y坐标的移动,是连续且平缓的变化的随机值,这点和Random是完全不同的,而且这个特点非常重要,应用范围很广。可以想象,把x或者y的值随着时间去改变,会得到动态变化的一系列数值。
    Debug.Log("随着两个参数的变化会生成一张变化的图像"+Mathf.PerlinNoise(0.5f,0.5f));

    //返回最大值和最小值(可以使用int&float类型),可以从两个值或者数组中获取最值
    Debug.Log("返回最大值:"+Mathf.Max(2.0f,3.6f));
    int[] i = { 5,9,6,3,45,8,};
    Debug.Log("返回最大值:" + Mathf.Max(i));
    Debug.Log("返回最小值:" + Mathf.Min(2.0f, 3.6f));
    int[] ii = { 5, 9, 6, 3, 45, 8, };
    Debug.Log("返回最小值:" + Mathf.Min(ii));

    //平滑插值
    Debug.Log("平滑插值:和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出" + Mathf.SmoothStep(1.0f,10.0f,2.0f));
    //随着时间的推移逐渐改变一个给定的角度到期望的角度
    //Debug.Log("平滑阻尼角度:"+ Mathf.SmoothDampAngle(current: float, target: float, ref currentVelocity : float, smoothTime: float, maxSpeed: float = Mathf.Infinity, deltaTime: float = Time.deltaTime));
    //平滑阻尼:随着时间的推移逐渐改变一个值到期望值。
    //Mathf.SmoothDamp(current: float, target: float, ref currentVelocity : float, smoothTime: float, maxSpeed: float = Mathf.Infinity, deltaTime: float = Time.deltaTime)

    //Unity5.6支持的一个方法,通过温度单位开尔文来表示RGB
    //print(Mathf.CorrelatedColorTemperatureToRGB(float kelvin))   kelvin取值1000-40000
    //5.6支持的方法   将给定值从伽玛(sRGB)转换为线性颜色空间。
    //Mathf.GammaToLinearSpace(float value);
    //5.6支持的方法   将给定的值从线性转换为伽玛 (sRGB) 颜色空间。
    //Mathf.LinearToGammaSpace(float value);

    //正反余弦,正弦,正切等
    //反余弦值 反正弦值  反正切值  反正切2   注意参数都是弧度
    print(Mathf.Acos(1f));
    print(Mathf.Asin(1f));
    print(Mathf.Atan(1f));
    print(Mathf.Atan2(1f, 2f));
    //余弦  正弦  正切    注意参数都是弧度,可以考虑通过Mathf的静态变量来切换弧度和角度
    print(Mathf.Cos(0.5f));
    print(Mathf.Sin(Mathf.Deg2Rad * 30));  //求sin(30)  即0.5
    print(Mathf.Tan(0.5f));
}


// Update is called once per frame
void Update () {
    
}
}

注意:有三种不同的运动

    //插值运算部分(先加速后减速运动)
    Debug.Log("反插值(返回参数c在参数ab之间的比例):" + Mathf.InverseLerp(2f, 8f, 5f));  //5在2和8之间的比例为0.5
    Debug.Log("插值(每次返回参数c在参数ab之间的比例值):"+Mathf.Lerp(1f,10f,0.8f));  //print 8.2   (10-1)*0.8 = 7.2+1 = 8.2
    Debug.Log("针对角度的插值运算:" + Mathf.LerpAngle(0.0f,90.0f,0.5f));  ///返回45度
    Debug.Log("线性插值在a和b之间,不受t的限制,可以跳到ab范围的外面去:" + Mathf.LerpUnclamped(0.5f, 9.0f, 1.6f));
    //匀速移动
    Debug.Log("从起点按比例增加一直到终点为止:" + Mathf.MoveTowards(1.0f, 10.0f, 2.0f));  //第一次返回1+2=3
    Debug.Log("角度匀速增加:"+Mathf.MoveTowardsAngle(30.0f,90.0f,10.0f));
    //来回运动
    Debug.Log("参数a在长度之间来回变化"+Mathf.PingPong(1.0f,10.0f));  // 此处参数t在1-10之间来回变化(需要放在update里面)
    Debug.Log("来回循环" + Mathf.Repeat(1.0f, 5.0f));  //在1-5之间来回循环   和Mathf.PingPong的差异 暂时不清楚

你可能感兴趣的:(Mathf类)