1.解释unity中vector?用法?
解释unity中vector?用法?
向量在Unity的桌之桌含义
在Unity中最常用的类就是Vector3这个类了,简单的球源球游说是向量,实际上远非如此。戏开在Unity中Vector3有一下几种含义
1. 三个数字打一包:
这种用法没有几何意义,桌之桌就是球源球游三个数,没其他的戏开qtiolot源码编译。比如欧拉角,桌之桌缩放比例,球源球游都是戏开这样的用法,这种情况不能看成是桌之桌向量。所以对这种用法做向量运算的球源球游话结果可能会很奇怪。
2. 空间位置的戏开“点”:
关键词是“点”,这种情况用的桌之桌最多的是transform.Position,它表示的球源球游是位置,与x,戏开y,z坐标对应,在某些计算下有集合含义,可以做运算。kkrieger源码
3. 空间位置的“方向线段”:
方向线段这才是向量真正的姿态,一个向量有两个含义:大小和方向,所以向量可以拆分成两部分来看,大小就是模(|v|),方向就是标准化(Vn),例如描述一个朝Vn方向大小为|v|的速度。
这里有一个隐藏属性,就是从原点(0,0,0)出发。两点一线。律师源码
所以向量可以分解为v=|v|* Vn
向量和常数(i)的运算:
不能加减。
iV=Vi=(ix,iy,iz) 满足交换律。代表把线拉长多少倍
V/i = (x/i, y/i, z/i) 注意 i/V是不行的。代表把线缩小多少倍
向量的常用运算和意义:
1. 向量的长度(模|v|)
注意只有当做”方向线段“的时候模才有意义,简单的说就是这条线有多长,就是你用尺子量出来的数据。
公式:
脚本:v.magnitude,v.sqrMagnitude
sqrMagnitude代表模的平方,为啥会有这么个东西呢?其实仅仅是101源码因为平方根的计算会很耗时,sqrMagnitude的效率会高很多,例如在比较模的大小这类的问题上,比较sqrMagnitude的大小就足够了。
2. 向量的标准化(单位向量 Vn)
同样,是对“方向线段”的描述, 意思是把这条线拉长或者缩短,让他的模等于1,他最大的作用就是表示方向,判断两个向量是不是一个方向,判断Vn就可以了。端午源码
公式:
脚本:v.normalized, v.Normalize()
使用技巧:如要把任意V长度变成5,直接5*Vn就可以了
v.normalized是计算自己标准后的向量,然后返回别处用,自己的值不会改变。
v.Normalize()是把自己标准化,自己的值会改变。
3. 向量相加(Va+Vb)
看做“方向线段”可以用来表示路径,速度等的叠加。
例如:走到a点再走到b点的结果。先以速度a出发再受到速度b的结果。
公式:
脚本: 直接写Va+Vb
4. 向量相减(Va-Vb)
看做“点”时表示:将两点连成方向线段,方向由b指向a。如此一来要计算两点之间的距离和相对方向就很容易了,距离是|Va-Vb|, 相对方向是Va-Vb再标准化。这个很实用
看做“方向线段”可以用来求速度,路径等的逆运算,回滚等。
公式:
脚本: 直接写Va-Vb
5. 向量点乘(Va.Vb)
具体含义比较模糊代表,在物理学中,已知力与位移,点乘的结果为功, 看做“方向线段”可以用来求夹角,个人感觉这是最有用的地方。
公式: 注意结果是一个常数
脚本: Vector3.Dot(va, vb)
实用技巧:,可以直接得到夹角,比较好的是Unity提供了这个方法Vector3.Angle(Va, Vb)。
6. 向量叉乘(Va x Vb)
这个感觉很少用,我也几乎没用过,坐等大神来解答
脚本: Vector3. Cross (va, vb)
7. 投影(Vp)
V在轴Vb上的影子, 这个概念不好说清楚,可以去问度娘,可以用来做向量的切割,比如要限制物体的运动方向时可以使用投影。
公式:
脚本: Vector3.Project(V, Vb);
8. 反射(Vr)
V对于法线N的反射,这个最有意思了,想想一下光反射或者桌球反弹,就是那个概念。可以用于模拟一下物理碰撞。
公式: 注意此处N需要标准化
脚本: Vector3. Reflect (V, N);