基础
Mathf
Mathf和Math
Math是C#中封装好的用于数学计算的工具类,位于System命名空间中
Mathf是Unity中封装好的用于数学计算的工具结构体,位于UnityEngine命名空间中
他们都是提供来用于进行数学相关计算的
他们的区别
Mathf和Math中的相关方法几乎一样
Math是C#自带的工具类,主要提供一些数学相关计算方法
Mathf是Unity专门封装的,不仅包含Math中的方法,还多了一些适用于游戏开发的方法
所以用Unity开发游戏时,使用Mathf中的方法用于数学计算即可
Mathf中的常用方法
重要方法
插值运算:Mathf.Lerp((float a, float b, float t);
Lerp 函数公式:result = Mathf.Lerp(start, end, t);
t为插值系数,取值范围为0~1
result = start + (end - start) * t;
用法一
每帧改变start的值,速度先快后慢,无限接近end,但是不会到达end,类似于一个反函数的图像
start = Mathf.Lerp(start, 10, Time.deltaTime)
用法二
每帧改变t的值,速度匀速,位置逐渐接近,当t>=1时,得到end
tim += Time.deltaTime;
result = Mathf.Lerp(start, 10, time);
一般方法
- π:
Mathf.PI - 取绝对值:
Mathf.Abs(float f); - 向上取整:
Mathf.CeilToInt(float f); - 向下取整:
Mathf.FloorToInt(float f); - 钳制函数:
Mathf.Clamp(float value, float min, float max);,限制value的大小在min到max区间 - 获取最大值:
Mathf.Max(params float[] values); - 获取最小值:
Mathf.Min(params float[] values); - 一个数的n次幂:
Mathf.Pow(float f, float n); - 四舍五入:
Mathf.RoundToInt(float f); - 一个数的平方根:
Mathf.Sqrt(float f); - 判断一个数是否是2的n次方:
Mathf.IsPowerOfTwo(int value); - 判断正负数:
Mathf.Sign(float f);
三角函数
radian:弧度 angle:角度 degree:度
- 弧度、角度相互转化
//弧度转角度
float rad = 1;
float anger = rad * Mathf.Rad2Deg;
print(anger);
//角度转弧度
anger = 1;
rad = anger * Mathf.Deg2Rad;
print(rad);//注意:Mathf中的三角函数相关函数,传入的参数需要是弧度值
print(Mathf.sin(30*Mathf.Deg2Rad));//0.5
print(Mathf.cos(60*Mathf.Deg2Rad));//0.5//注意:反三角函数得到的结果是 正弦值或者余弦值对应的弧度
rad = Mathf.Asin(0.5f);
print(rad *Mathf.Rad2Deg);//30
rad = Mathf.Acos(0.5f);
print(rad * Mathf.Rad2Deg);//60
坐标系
世界坐标系
this.transform.position;
this.transform.rotation;
this.transform.eulerAngles;
this.transform.lossyScale;
物体坐标系
this.transform.localPosition;
this.transform.localRotation;
this.transform.localEulerAngles;
this.transform.localScale;
屏幕坐标系
Input.mousePosition;
Screen.width;
Screen.height;
坐标转换
//世界转本地
this.transform.InverseTransformDirection;
this.transform.InverseTransformPoint;
this.transform.InverseTransformVector;
//本地转世界
this.transform.TransformDirection;
this.transform.TransformPoint;
this.transform.TransformVector;
//世界转屏幕
Camera.main.WorldToScreenPoint;
//屏幕转世界
Camera.main.ScreenToWorldPoint;
//世界转视口
Camera.main.WorldToViewportPoint;
//视口转世界
Camera.main.ViewportToWorldPoint;
向量
//三维问量:-Vector3
//Vector3有两种几何意义
//1.位置 - 代表一个点
print(this.transform.position);
//2.方向 - 代表一个方向
print(this.transform.forward);
print(this.transform.up);//两点决定一个向量
//A和B此时 几何意义 是两个点
Vector3 A = new Vector3(1.2,3);
Vector3 B = new Vector3(5,1,5);
//求向量
//此时 AB和 BA 他们的几何意义 是两个向量
Vector3 AB = B - A;
Vector3 BA = A - B;//零向量和负向量
print(Vector3.zero);
print(Vector3.forward);
print(-Vector3.forward);//向量的模长
//vector3中提供了获取向量模长的成员属性
//magnitude
print(AB.magnitude);
Vector3 c = new Vector3(5,6,7);
print(c.magnitude);
print(Vector3.Distance(A,B));//单位向量
//Vector3中提供了获取单位向量的成员属性
//normalized
print(AB.normalized);
print(AB / AB.magnitude);//点乘
Vector3.Dot(Vector3 lhs, Vector3 rhs);
//叉乘(左手螺旋定则,因为unity是左手坐标系,向上的是y轴)
Vector3.Cross(Vector3 lhs, Vector3 rhs);//向量之间的夹角
Vector3.Angle(Vector3 from, Vector3 to);