0 vector normalize unity-game-engine
我很不幸进入了一所不关心学生为大学做准备的高中,但我正在学习一些游戏编程,以及我得到的所有编程,但我正在学习游戏 AI 课程,我们正在学习 FSM和 AI 运动,我遇到了“规范化”,研究了它,它有点道理,但我将如何在游戏编程中使用它?也许我只是不太了解这个概念(从来没有真正上过代数课,虽然我每天在其他编程中都使用高级数学,但是我边学边学),但我只是不明白为什么我需要要做到这一点。
矢量代表长度和方向。有时使用“单位向量”(长度为 1)进行乘法很方便,因为它很容易控制结果的长度。
将一磅的重量乘以五,你有什么?五磅重。
将单位向量乘以 5,你有什么?指向该方向五个单位的向量。
作为一个实际的例子,假设我正在为一个简单的游戏编写一个摄像系统:两辆车在一条直线上相互比赛。相机应该围绕玩家的汽车运行,同时看向对手的方向。
由于您使用unity3d标记了问题,因此我将提供可在 Unity3D 中编译的 C# 代码。但是,任何用途的基本概念都是相同的。
让我们假设我们得到两点:
Vector3 playerPos, enemyPos;
Run Code Online (Sandbox Code Playgroud)
我们可能会发现一些有用的操作:
//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;
Run Code Online (Sandbox Code Playgroud)
最后,我们定位相机:
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);
Run Code Online (Sandbox Code Playgroud)
您可能注意到,我使用的Unity3D的一个内置的单元载体(包括Vector3.up,Vector3.right和Vector3.forward)。Unity 中的每个变换对象也有局部空间等价物。
另一个用途:使用矢量点积,您可以检查两个归一化矢量是否指向相似的方向,因为点积的输出范围从 -1(相反方向)到 0(垂直)到 1(平行)。
| 归档时间: |
|
| 查看次数: |
2864 次 |
| 最近记录: |