Unity中的向量


向量

模:向量的长度标准化(Normalizing):保持方向不变,将向量的长度变为1.
单位向量:长度为1的向量。
零向量:各分量均为0的向量
向量运算——加减:向量的加法(减法)为各个分量分别相加(相减)。在物理上可以用来计算两个里的合力,或者几个速度份量的叠加。

属性

forward Vector3(0, 0, 1)的简码,也就是向z轴。
right Vector3(1, 0, 0)的简码,也就是向x轴。
up Vector3(0, 1, 0)的简码,也就是向y轴。
zero Vector3(0, 0, 0)的简码。
one 是 Vector3(1, 1, 1)的简码。
Vector3.sqrMagnitude 长度平方(只读的)
【注】计算长度的平方而不是magnitude是非常快的。如果你是比较两个向量的长度差,你可以比较他们的平方长度。
向量的长度是用勾股定理计算出来,计算机计算两次方和开根的运算量比加减法要费时的多。所以如果是想比较两个向量的长度,用sqrMagnitude可以快出很多。

向量运算

数乘:向量与一个标量相乘称为数乘。数乘可以对向量的长度进行缩放,如果标量大于0,那么向量的方向不变,若标量小于0,则向量的方向会变为反方向。

点乘:两个向量点乘得到一个标量,数值等于两个向量长度相乘再乘以两者夹角的余弦值。如果两个向量a,b均为单位向量,那么a.b等于向量b在向量a方向上的投影的长度(或者说向量a在向量b方向上的投影)。

叉乘:两个向量的叉乘得到一个新的向量,新向量垂直与原来的两个向量,并且长度等于原来向量长度相乘后夹角的正弦值

向量加法
向量加法就是两个向量对应的x,y,z轴坐标进行加法运算
例如以下的代码

Vector3 v1 = new Vector3(1, 2, 3);
Vector3 v2 = new Vector3(4, 2, 1);
Vector3 v3 = v1 + v2;  //v3的结果 (5.0, 4.0, 4.0)

向量减法
向量加法就是两个向量对应的x,y,z轴坐标进行减法运算
例如以下的代码

Vector3 v1 = new Vector3(1, 2, 3);
Vector3 v2 = new Vector3(4, 2, 1);
Vector3 v3 = v2 - v1;  //v3的结果 (3.0, 0.0, -2.0)

向量点乘 Vector3.Dot
两个向量的点乘积。 (向量数量积) 点积是一个浮点数的值:两个向量的长度(模)相乘再乘以他们之间夹角的余弦值.(即:|a||b|cos<a,b>)
如果点乘的结果等于0,那么两个向量互相垂直。
如果结果大于0,那么两个向量的夹角小于90度,方向基本相同;
如果结果小于0,那么两个向量的夹角大于90度,方向基本相反。

 private void TestDot(Vector3 a,Vector3 b)
    {
        //计算两个向量点乘的结果 得到的是一个数值
        //求得的是向量b在向量a方向上的投影
        float result = Vector3.Dot(a,b);
        Debug.Log("Result = "+result);

        //计算两个向量的夹角,该方法得到的是一个角度  计算出来的夹角的范围是0-180度
        float angle = Vector3.Angle(a,b);
        Debug.Log("angle = " + angle);

        //向量b方向上的单位向量在向量a方向单位向量的投影
        //计算 a、b 单位向量的点积,得到夹角余弦值,|a.normalized|*|b.normalized|=1;  
        result = Vector3.Dot(a.normalized,b.normalized);
        Debug.Log("result = " + result);
        // 通过反余弦函数获取 向量 a、b 夹角(默认为 弧度)  
        float radians = Mathf.Acos(result);
        angle = radians * Mathf.Rad2Deg;
        Debug.Log(angle);
    }

向量叉乘 Vector3.Cross
两个向量的交叉乘积(外积)
它的结果是一个矢量。我们通常需要的是它的方向(Vector3.Cross(a.b).normalized)
得到一个分别垂直于这两个向量的向量

距离 Vector3.Distance

 Vector3 v1 = new Vector3(0, 0, 2);
 Vector3 v2 = new Vector3(2, 0, 0);
 //求两个点之间的距离
 Debug.Log(Vector3.Distance(v1,v2));

插值 Vector3.Lerp
obj1的位置是上一帧的位置加上(目标位置-上一帧的位置)*0.1

obj1.transform.position = Vector3.Lerp(obj1.transform.position, obj2.transform.position, 0.1f);

声明:冰醋酸|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Unity中的向量


一切随缘