Unity 基础
Unity 基础
E5战未来Unity 基础
Mathf
Mathf.PI
圆周率
Mathf.Abs()
绝对值
Mathf.CeilToInt()
向上取整(不是4舍5入)
Mathf.FloorToInt()
向下取整(不是4舍5入)
Mathf.Clamp(10,11,20)
钳形函数(第一个数和后面两个数进行比较,小于后面最小的数取最小数,大于同理,在他们之间则取本身)
Mathf.Max(1,23,4)
最大值
Mathf.Min()
最小值
Mathf.Pow(2,3);
谁的几次方
Mathf.RoundToint()
四舍五入
Mathf.Sqrt()
平方根
Mathf.IsPowerOfTwo()
判断一个数是不是2的n次幂
Mathf.Sign()
判断一个数是不是正数(正数返回1负数返回-1)
Mathf.Lerp(start,10,Time.deltaTime)
插值运算Lerp
Mathf之三角函数
角度和弧度的转换关系
1rad = 57.3° 1° = 0.01745rad
Mathf.Rad2Deg
弧度转角度
Mathf.Deg2Rad
角度转弧度
三角函数
Mathf.Sin()
传入的是弧度角
Mathf.Cos()
反三角函数(正弦或余弦对应的弧度)
Mathf.Asin()
坐标系
世界坐标系:顾名思义
物体坐标系:建模时的坐标系,在unity中可以理解为本地坐标系
屏幕坐标系:1920:1080从屏幕的坐下角为zero
视口坐标系:将屏幕坐标系的长宽转换成0~1
向量
两点确定一个向量,终点减起点
Vector3(2,3,2).magnitude
模长
Vector3(2,3,2)
.normalized单位向量
点乘(Dot)
几何意义:可以得到一个向量在自己向量上的投影
作用:可以用这个规律来实现敌人的大致判断方位
A(Xa,Ya,Za) B(Xb,Yb,Zb)
A·B = XaXb + YaYb + Za*Zb(标量)
点成的结果:>0锐角 =0直角 <0钝角
Vecrot3.Dot(transform.forword,targeObject.transform.postion - transform.postion)
;
Vector3.Angle();
计算两个角之间的夹角
叉乘(Cross)
几何意义:法向量
作用:判断敌人的左右
Vector3.Cross();
向量插值运算(Lerp)
Vector3.Lerp(StartPos,target,time);
球形插值(Slerp)
Vector3.Slerp(StartPos,target,time);
欧拉角(Rotation)
X-Y-Z
为什么有万向锁死:欧拉角描述相对于初始状态的变换,只和最终状态有关,与过程无关。
可以简单的认为中间的y轴旋转90°后两个轴重合,失去一个自由度
四元数
Quaternion.AngleAxis()
旋转角度轴(20,Vector.up)
Quaternion.Slerp()
对旋转角度进行插值运算(transform.postion,target.postion,Time.daletime)
Quaternion.LookRotation()
将一个向量转换成四元数旋转角度
四元数 * 四元数
两个四元数相乘得到一个新的四元数,代表两个旋转量的叠加,相当于旋转(相对于自身坐标系)
例如:transform.postion.rotation *= p1(旋转p1角度)
四元数 * 向量
将向量旋转,返回的是旋转的向量
延迟函数
Invoke("function",2);
InvokeRepeating("function",2,1);
两秒后,每隔一秒执行一次
CancelInvoke();
取消延迟函数
范围检测
作用:一瞬间碰撞检测,没有真的生成碰撞体,攻击检测
Physics.OverlapBox(Vector3.zero,Vector3.one,Quaternion.AngleAxis(45,Vector3.up),1<<LayerMask.NameToLayer(“UI”))
参数1:检测位置
参数2:检测的大小
参数3:检测旋转
参数4:检测的层级
知识点(层级左移):在unity中的层级一共有0 - 31层对应的int类型的32位,一一对应
射线检测
RaycastHit2D.Raycast(Vector2 origin, Vector2 direction, float distance, int layerMask)
参数1:起始位置
参数2:检测方向
参数3:检测距离
参数4:检测的层级