题
我不幸的是,参加一所高中,并不关心为大学做准备学生,但我正在学习一些游戏编程,以及我得到的一切编程,但我正在参加游戏AI课程了解FSM和AI运动,我遇到了“正常化”,看了它,它有点有意义,但我将如何在游戏编程中使用它?也许我只是不明白这个概念很好(从来没有真正服用代数课,尽管我每天都在其他编程中使用更高的数学数学,但我在我走的时候学习),但我只是没有得到我需要的原因要做到这一点。
解决方案
矢量表示长度和方向。有时它可以方便地使用“单位向量”(长度为1)以进行乘法,因为它很容易控制结果的长度。
乘五个重量乘五,你有什么? 5磅重量。
将单位向量乘以五,你有什么?指向该方向指向五个单位的矢量。
作为一个实际的例子,假设我正在为简单的游戏写一款相机系统:两辆汽车在直线轨道上互相竞争。相机应该在播放器的车周围绕在对手的方向时绕轨道。
自从您使用 Unity3d 我会提供在Unity3D中编译的C#代码。但是,基本概念对于任何使用相同。
让我们假设我们给出了两点:
Vector3 playerPos, enemyPos;
.
一些操作我们可能会发现有用:
//find separation between two points
Vector3 playerToEnemy = enemyPos - playerPos;
//find distance between them
float distance = playerToEnemy.magnitude;
//find direction of separation
Vector3 enemyDirection = playerToEnemy.normalized;
.
最后,我们定位相机:
Vector3 camPos = playerPos; //start at player's position
camPos -= enemyDirection * 10f; //move ten units away from enemy
camPos += Vector3.up * 5f; //move five units up
Transform tr = Camera.main.transform;
tr.position = camPos;
tr.LookAt(enemyPos);
.
您可能会注意到我使用了一个Unity3d内置单元向量(包括Vector3.up
,Vector3.right
和Vector3.forward
)。 unity中的每个变换对象也具有本地空间等效项。
另一个用途:通过矢量点产品,您可以检查两个归一化矢量是否相似方向,因为点产品的输出将从-1(相反方向)到0(垂直)到1(并行)。
不隶属于 StackOverflow