Unity 基础

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:检测的层级