Unity基础

Unity基础

基础

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);

一般方法

  1. π:Mathf.PI
  2. 取绝对值:Mathf.Abs(float f);
  3. 向上取整:Mathf.CeilToInt(float f);
  4. 向下取整:Mathf.FloorToInt(float f);
  5. 钳制函数:Mathf.Clamp(float value, float min, float max);,限制value的大小在min到max区间
  6. 获取最大值:Mathf.Max(params float[] values);
  7. 获取最小值:Mathf.Min(params float[] values);
  8. 一个数的n次幂:Mathf.Pow(float f, float n);
  9. 四舍五入:Mathf.RoundToInt(float f);
  10. 一个数的平方根:Mathf.Sqrt(float f);
  11. 判断一个数是否是2的n次方:Mathf.IsPowerOfTwo(int value);
  12. 判断正负数:Mathf.Sign(float f);

三角函数

radian:弧度 angle:角度 degree:度

  1. 弧度、角度相互转化
//弧度转角度
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);