一、向量的定义
向量:有大小有方向 与向量相对的量成为标量:即只有大小没有方向的量。例如物体移动中的平均速率、路程。 模:向量的长度标准化(Normalizing):保持方向不变,将向量的长度变为1. 单位向量:长度为1的向量。 零向量:各分量均为0的向量 向量运算——加减:向量的加法(减法)为各个分量分别相加(相减)。在物理上可以用来计算两个里的合力,或者几个速度份量的叠加。
二、向量的加减法
每个坐标都进行加减(x与x,y与y,z与z) 如果v1和v2都表示一个点的话,那么v3的方向是从v1开始指向v2的一个带有箭头的射线,此时v3就是一个向量 如果v1和v2都表示一个向量的话,那么v3是一个从v1的尾部指向v2的头部的一个带有方向箭头的一条射线 ,减法则相反
三、点乘
点乘:向量·向量=标量 每个坐标都进行相乘(x与x,y与y,z与z) Vector3.Dot():计算点乘的方法
float pos = Vector3.Dot(transform.forward, (target.position - transform.position).normalized);
print("角度为:" + Mathf.Acos(pos) * Mathf.Rad2Deg);
print("角度2为:" + Vector3.Angle(transform.forward, target.position - transform.position));
四、叉乘
叉乘:向量X向量=向量 向量A(XA,YA,ZA) 向量B(XB,YB,ZB) AXB=(XC,YC,BC) XC=YAZB-ZAYB YC=XAZB-ZAXB ZC=XAYB-YAXB 得出来的结果(XC,YC,BC)同时垂直向量A和向量B,又称为他们的法线 Vector3.Cross():计算叉乘的方法
五、注释旋转
function LookRotation (forward : Vector3, upwards : Vector3 = Vector3.up) : void
传入的两个参数分别代表前方盯着的方向以及自己的上方向。它可以让一个GameObject转动脑袋盯着另一个物体。
public Vector3 target;
void Update()
{
cube.rotation = Quaternion.LookRotation(target - cube.position, Vector3.up);
Debug.DrawLine(Vector3.zero, cube.forward, Color.blue);
Debug.DrawLine(Vector3.zero, cube.right, Color.red);
Debug.DrawLine(Vector3.zero, cube.up, Color.green);
}
LookAt()与LookRotation()的参数都相似,但前者是将游戏对象的z轴指向参数所表示的那个点,而后者是将游戏对象的z轴指向参数所表示的向量的方向;
六、Invoke和InvokeRepeating
(1)Invoke(methodName: string, time: float): void;
methodName:方法名 time:多少秒后执行
案例:点击鼠标左键,3秒后克隆一个游戏对象
public GameObject cube;
void Update ()
{
if (Input.GetMouseButtonDown(0))
{
Invoke("CreateNewCube", 3f);
}
}
void CreateNewCube()
{
Instantiate(cube);
}
(2)InvokeRepeating(methodName: string, time: float, repeatRate: float): void;
methodName:方法名 time:多少秒后执行 repeatRate:重复执行间隔
案例:点击鼠标左键,3秒后每隔2秒克隆一个游戏对象
public GameObject cube;
void Update ()
{
if (Input.GetMouseButtonDown(0))
{
InvokeRepeating("CreateNewCube", 3f,2f);
}
}
void CreateNewCube()
{
Instantiate(cube);
}
CancelInvoke:取消该脚本上的所有延时方法
int i = 0;
void CreateNewCube()
{
Instantiate(cube);
i++;
print("执行次数:"+i);
if (i == 5)
{
CancelInvoke();
}
}
七、Mathf
(1)Mathf.Abs:绝对值
(2)Mathf.Clamp(float value,float min,float max)
在 Mathf.Clamp 中传入三个参数:value,min,max
限制 value的值在min,max之间,如果value大于max,则返回max,如果value小于min,则返回min,否者返回value;
案例:飞机飞行的范围限制
float x = Mathf.Clamp(transform.position.x, -6.66f, 6.66f);
float z = Mathf.Clamp(transform.position.z, -35.5f, -11.5f);
transform.position = new Vector3(x, 0, z);
(3)Mathf.Ceil上限值
Ceil (f : float) : float
返回 f 指定数字或表达式的上限值。数字的上限值是大于等于该数字的最接近的整数。
(4)Mathf.Floor下限值
Floor (f : float) : float
返回参数 f 中指定的数字或表达式的下限值。下限值是小于等于指定数字或表达式的最接近的整数。
(5)Mathf.Max最大值
Max (a : float, b : float): float
返回两个或更多值中最大的值。
Mathf.Min最小值
function Min (a : float, b : float): float
返回两个或更多值中最小的值。
(6)Mathf.Repeat重复
Repeat (t : float, length :float) : float
循环数值t,0到length之间。t值永远不会大于length的值,也永远不会小于0。
案例:立方体循环往复的放大
void Update ()
{
float a = Mathf.Repeat(Time.time, 2);
transform.localScale = new Vector3(a, a, a);
}
Mathf.PingPong乒乓
PingPong (t : float, length: float) : float
0到length之间往返。t值永远不会大于length的值,也永远不会小于0。
返回值将在0和length之间来回移动。
案例:立方体循环往复的放大缩小
void Update ()
{
float a = Mathf.PingPong(Time.time, 2);
transform.localScale = new Vector3(a, a, a);
}
(7)Mathf.PI圆周率
PI(读pai)的值,也就是圆周率(π)的值3.14159265358979323846…
(8)Mathf.Pow次方
Pow (f : float, p : float): float
计算并返回 f 的 p 次方。
(9)Mathf.RoundToInt四舍五入到整数
RoundToInt (f : float) :int
返回 f 指定的值四舍五入到最近的整数。
如果数字末尾是.5,因此它是在两个整数中间,不管是偶数或是奇数,将返回偶数。
Mathf.Round四舍五入
Round (f : float) : float
返回浮点数 f 进行四舍五入最接近的整数。
如果数字末尾是.5,因此它是在两个整数中间,不管是偶数或是奇数,将返回偶数。
(10)Mathf.Sqrt平方根
Sqrt (f : float) : float
计算并返回 f 的平方根。
|