规范化向量如何与游戏编程相结合

时间:2014-02-25 01:41:15

标签: vector unity3d normalize

我很幸运地上了一所不关心为大学生做准备的高中,但是我正在学习一些游戏编程,以及我得到的所有编程,但我正在参加游戏AI课程,我们是了解FSM和人工智能的动作,我遇到了“规范化”,对它进行了调查,这有点意义,但我如何在游戏编程中使用它?也许我只是不理解这个概念(从来没有真正学过代数课,虽然我在其他编程中每天都使用更高级别的数学,但是我随便学习),但我只是不明白为什么我需要要做到这一点。

1 个答案:

答案 0 :(得分:4)

向量代表长度和方向。有时使用“单位向量”(长度为1)进行乘法很方便,因为它很容易控制结果的长度。

将一磅重量乘以五,你有什么?体重五磅。

将单位向量乘以5,你有什么?指向该方向的五个单位的矢量。

作为一个实际的例子,假设我正在为一个简单的游戏编写一个摄像系统:两辆汽车在一条直线轨道上相互竞争。相机应朝向对手方向围绕玩家的车辆进行围绕轨道运行。

由于您使用标记了问题,因此我将提供可在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.upVector3.rightVector3.forward)。 Unity中的每个转换对象也具有本地空间等价物。

另一个用途:使用矢量点积,你可以检查两个归一化矢量是否指向相似的方向,因为点积的输出范围从-1(相反方向)到0(垂直)到1(平行)。