#一、描述 此课程说明Vector3的一些方法的介绍以及一些好用的api
#二、Vector介绍
示例图,可以以这种角度来理解

using UnityEngine;
using System.Collections;
public class CubeController : MonoBehaviour {
//自身隐藏
public void hideSelf(){
//x y z
Vector3 vector3 = new Vector3();
float x = vector3.x;
float y = vector3.y;
float z = vector3.z;
//获取vector3的单位向量
//此方法会让vector3长度变成1,方向不变
vector3.Normalize();
//此方法返回vector3方向上的单位长度,但是vector3本身不会发现改变
float normal = vector3.normalized;
//返回vector3的长度 n = (x * x + y * y + z * z ),最后对n进行开方
float magnitude = vector3.magnitude;
//返回这个向量的平方大小,还没有开方获得向量的长度,n = (x * x + y * y + z * z )
float sqr = vector.sqrMagnitude
// 下列的理解可以以此场景想象,比如一个球体,你观看他的位置应该是这样的:x轴箭头往右,Y箭头往上,z箭头往前,这符合数学坐标图,这样你就可以想象的出
//以下的属性了!
Vector3 up = Vector3.up; //up是Y轴上的正方向的的单位向量, x = 0 y = 1 z =0
Vector3 down = Vector3.down; //down是Y轴的负方向上的单位向量 x = 0 y = -1 z = 0
Vector3 left = Vector3.left; //left是x轴的负方向上的单位向量 x = -1 y = 0 z = 0
Vector3 right = Vector3.right; //right是x轴的正方向的单位向量 x = 1 y =0 z = 0
Vector3 forward = Vector3.forward; //forward是z轴正方向的单位向量 x =0 y =0 z = 1
Vector3 back = Vector3.back; //back是z轴负方向的单位向量 x = 0 y = 0 z = -1
Vector3 zero = Vector3.zero; //此方法返回的是原点 0 0 0
Vector3 vector1 = new Vector3(1f,2f,3f);
Vector3 vector2 = new Vector3 (2f,3f,4f);
//求两个向量的夹角
Vector3.Angle (vector1,Vector2);
//求两个向量的距离
Vector3.Distance (vector1, Vector2);
//向量点乘
Vector3.Dot (vector1, Vector2);
//向量插乘
Vector3.Cross (vector1,vector2);
}
}
补充:
Vector3向量有两种表现形式: 1 位置,坐标 2 方向
位置可以说明一个物体在一个世界坐标或者本地坐标中的绝对位置,比如Vector3(1,0,0),说明他在原点位置右移一个单位的坐标,用于表示一个物体的位置。
Vector3也可以作为一个方向来表示,比如Vector3(1,0,0),这个坐标的x轴是1,代表他往右移动一个单位,他的方向就是右 再比如Vector3(1,1,1),x,y,z都各自移动了一个单位,说明他的方向是右上方向移动,因为他x一直往右,y一直往上移动,z一直往前,这样就代表了一个方向,可以用于跟标量进行计算,计算出他要行走的路程。
####归一化 Vector3.normalized 归一话可以以Vector3的方向来举例,比如Vector3(3,0,8),这一看就知道是右斜方移动,但是为了便于计算,可以对这个向量进行归一化,把他们都归成1,0的归一还是0,最后的结果是Vector3(1,0,1),这样的表达方式和未归一化的表达方式是一至的,都只是为了表现出一个方向而已,但是为了方便计算,用归一化来更有效率。
示例: 时钟的钟盘上通常有时针,分针,秒针,这三根针,大部分时间,这三根针所指的方向不同,并且这三根针的长度也不同(时针最短,分针居中,秒针最长),归一化,就是把这三根针的长度变成一样的标准长度(这里标准长度是1),而不干涉这三根针的指向。
Vector3相加: 两个Vector3相加,会得到一个新的Vector3坐标,就比如Vector3(1,0,0)加上Vector3(1,0,0),结果就是Vector3(2,0,0),这个新的坐标位置就产生了改变,在原先的位置上又右移了一个单位。
Vector3相减: 两个Vector3相减,他们的结果是一个方向!用第二个向量减第一个向量,能够知道第一个向量指向第二个向量的方向是怎么样的!这种情况适用于枪口,比如在一把枪上,设立两个空的物体,物体1和物体2,我们现在要确定枪口对准的方向,只要用物体2减去物体1,就能得到枪口的方向了!
点乘:
Vector3.dot(Vector3 v1,Vector3 v2)
这个点乘根据两个物体向量位置,计算出他们的夹角的角度是多少!适用于Ai的可视范围或者巡查角度范围
####叉乘: Vector3.cross(Vector3 v1,Vector3 v2,Vector3 v3) 这个是根据三个向量,计算出法线来

public Unity3d cross(Unity3d unity){
Unity3d old = new Unity3d (this.x,this.y,this.z);
Unity3d news = unity;
Unity3d result = new Unity3d (old.y * news.z - old.z * news.y, old.z * news.x - old.x * news.z, old.x * news.y - old.y * news.x);
return result;
}
Vector3.Lerp(Vector3 a, Vector3 b, float t): 这个用于计算两个向量之间的线性插值,向量一和向量二,他们的距离连成一条线,而第三个参数t最大是1,最小是0,如果是0.2就是返回向量一到向量二这个距离中百分之20的那个位置,返回的是一个Vector3
Vector3.Slerp(Vector3 a, Vector3 b, float t): 这个跟上面的lerp一样,不一样的地方就是上面的两个点击是直线走动,而这个方法是曲线走动,是一个弧度