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的差异 暂时不清楚
网友评论