Unity的一些基础性东西

1.Unity是单线程的游戏引擎,unity的非主线程中无法访问Unity的API,这种限制的原因:游戏中逻辑更新和画面更新的时间点要求有确定性,必须按照帧序严格保持同步,否则就会出现游戏中的对象不同步现象。

2.生命周期:我们在自己脚本里写OnApplicationQuit,OnDisable,OnDestroy三个函数时的执行顺序于书写顺序一样,是因为在OnApplicationQuit里调用了后面两个函数。

3.center就是你那个模型,或者多个模型联合起来的外接盒的几何中心。pivot是模型制作者决定的,Unity内置模型的pivot就是它的几何中心,所以两者一样。而模型如果是用3ds Max或其它三维工具制作的,就可以把pivot设置到模型的任何位置(在Max中叫做模型的轴),比如可以把它设置到盒子的一个顶点上,或底盘中心。当两者不在一起的时候,如果设置为center,旋转的时候位置会跟着改变,如果设置成pivort,旋转时position则不会改变。

4.gloabl和local,前者显示的世界坐标轴,后者显示的自己坐标轴。

5.persp和ISO,前者是透视模式(3d),后者是正交模式(无论离摄像头近还是远都显示一样的,2d)。

6.关于物体移动:1.lerp:变速,由起点向终点无限接近。值由大到小2.movetowards:匀速3.Lerp:第三个参数为AnimationCurve 对象的curve.Evaluate(x)值,x为自定义float变量。

public AnimationCurve curve;
//(2)定义x轴变量
private float x;
//(3)定义持续时间

 [Tooltip("持续时间")]
public float duration = 1;

 x +=Time.deltaTime / duration;//备注:x到1相当于物体到达终点         
 //transform.position = Vector3.Lerp(Vector3.zero, target, curve.Evaluate(x));//将数值上的变化 转换为 坐标的变化
 transform.position = Vector3.LerpUnclamped(Vector3.zero, target, curve.Evaluate(x));//将数值上的变转换为 坐标的变化   无上限限制!

7.坐标点转换:local Space ---》 world space 

8.向量相减,方向指向被减数,向量相加,为两个向量的对角线,运算后得到的向量在世界坐标原点。1弧度 = 180 / π 角度,1角度 = π / 180 弧度。 弧度 = 角度数 * π / 180 (角度数* Mathf.Deg2Rad),角度 = 弧度数 * 180 / π(弧度数* Mathf.Rad2Deg)   unity里Mathf.Sin(弧度数)等参数用的是弧度数。向量的点乘(点积/内积):各分量乘积和,a·b=|a|·|b|cos<a,b>,几何意义:是一条边向另一条边的投影乘以另一条边的长度.相应元素的乘积的和:v1( x1, y1,z1) * v2(x2, y2,z2) = x1*x2 + y1*y2+z1*z2;注意 : 结果不是一个向量,而是一个标量, a*b = b*a  满足乘法交换律,Unity应用:1.对于标准化过得向量,点乘结果等于两个向量的夹角的余弦值,对于标准化过得向量,方向相同结果为1,垂直为0,完全相反为-1。2.根据点乘的正负值,得到夹角大小范围,>0,则夹角(0,90)<0,则夹角(90,180),可以利用这点判断一个多边形是面向摄像机还是背向摄像机。API:Vector3.Dot(a,b), 单位向量的到的点乘结果换算成的角度在0-180之间(Vector3.Angle(a,b)返回的也是0-180)。向量的叉乘(叉积/外积):定义:c = a x b,其中a b c均为向量,几何意义是:得到一个与这两个向量都垂直的向量,这个向量的模是以两个向量为边的平行四边形的面积,v1( x1, y1,z1) x v2(x2, y2,z2) = [y1 * z2 - z1 *y2, z1 *x2 - x1 * z2, x1 *y2 - y1 * x2]。性质1:c⊥a,c⊥b,即向量c与向量a,b所在平面垂直,性质2:模长|c| = |a||b| sin<a,b>。性质3:满足右手法则, a x b = -b x a,所以我们可以使用叉乘的正负值来判断a,b的相对位置,即b是处于a的顺时针还是逆时针方向,右手法则:右手的四指方向指向第一个矢量,屈向叉乘矢量的夹角方向(两个矢量夹角方向取小于180°的方向),那么此时大拇指方向就是叉乘所得的叉乘矢量的方向.(大拇指应与食指成九十度)(注意:Unity当中使用左手,因为Unity使用的是左手坐标系,从世界坐标的原点方向看向a,b是顺时针还是逆时针)。unity应用:简单的说: 点乘判断角度,叉乘判断方向。 形象的说: 当一个敌人在你身后的时候,叉乘可以判断你是往左转还是往右转更好的转向敌人,点乘得到你当前的面朝向的方向和你到敌人的方向的所成的角度大小。UnityAPI:Vector3.Cross(v1, v2).通过单位向量获得叉乘的向量的模长转换的角度在0-90度之间,因为模长是绝对值 一定是正的。

9.欧拉角于四元数:欧拉角:eulerAngles使用三个角度来保存方位。有点:任意三个数字都是合法的,不存在不合法的欧拉角,缺点:对于一个方位,存在多个欧拉角描述,因此无法判断多个欧拉角代表的位移是否相同,万向节死锁:物体沿x轴旋转±90度,自身坐标系z轴于世界坐标系y轴重合,此时再沿Y轴或Z轴旋转,将失去一个自由度,自身坐标的Y轴和世界坐标的z轴。旋转为0,全部转移另一个Z轴或者Y轴。四元数:Quaternion在3D图形学中代表旋转,由一个三维向量(x/y/z)和一个标量w组成,取值范围为-1到1.四元数左乘向量,表示将该向量按照四元数表示的角度旋转,两个四元数相乘可以组合旋转效果。优点:避免万向节死锁,缺点:存在不合法的四元数,不建议单独修改某个值。

猜你喜欢

转载自blog.csdn.net/weixin_39407066/article/details/85046527