我不幸的是,参加一所高中,并不关心为大学做准备学生,但我正在学习一些游戏编程,以及我得到的一切编程,但我正在参加游戏AI课程了解FSM和AI运动,我遇到了“正常化”,看了它,它有点有意义,但我将如何在游戏编程中使用它?也许我只是不明白这个概念很好(从来没有真正服用代数课,尽管我每天都在其他编程中使用更高的数学数学,但我在我走的时候学习),但我只是没有得到我需要的原因要做到这一点。

有帮助吗?

解决方案

矢量表示长度和方向。有时它可以方便地使用“单位向量”(长度为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(并行)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top