向量-位置,速度和方向

如您所知,几个月前,我开始了Unity之旅,并重新创建了Pong游戏(我仍然欠该系列的第2部分)。 就像使用任何新的编程语言和平台一样,我学到的越多,我就知道的越多。

 大小= sqrt((0 + 10)^ 2 +(0 + 5)^ 2) 
大小= sqrt(10 ^ 2 + 5 ^ 2)
大小= sqrt(100 + 25)
大小= sqrt(125)
大小= 11.2

您不必担心如何计算,统一引擎通过Vector .magnitude属性为您完成。

方向

对于我的游戏,我创建了一个向量来确定球的发射方向。 它可以右上,右下,左上或左下。 就在最近,我发现如果需要使用向量作为方向,则必须对其进行标准化。

为此,我们只需要将x和y值除以幅度即可。

标准化方向的重要性在于,它可以正确计算原始位置的距离,并确保它不会超调并超出目的地。

假设我们有一名玩家位于(1,1)位置,并且希望从该位置移出3个单位。 如果我们将3乘以玩家的位置,我们是否获得正确的距离?

如果我们测量新位置的大小或距离,则将得到以下值:

 大小= sqrt(3 ^ 2 + 3 ^ 2) 
大小= sqrt(9 + 9)
大小= sqrt(18)
大小= 4.2

哦哦! 这比我们预期的3个单位多1.2个单位。 这使玩家可以更快地移动并在对角线移动时过冲。

为了解决这个问题,我们首先需要使用上述公式对球员的原​​始位置进行标准化:

  //位置幅度(1,1) 
大小= sqrt(1 ^ 2 + 1 ^ 2)
大小= sqrt(2)
大小= 1.4
  //方向(规范化) 
方向=((1 / 1.4),(1 / 1.4))
方向=(0.7,0.7)
  //具有标准化方向的新位置 
unitsToMove = 3
新位置=(0.7,0.7)* 3 //方向* 3
新职位=(2.1,2.1)
  //检查大小是否正确 
新头寸的大小= sqrt(2.1 ^ 2 + 2.1 ^ 2)
新头寸的幅度= sqrt(4.4)
新位置的幅度= 2.9

使用归一化方向,新位置应为(2.1,2.1),从而得到2.9的大小。 没有超调!

速度

速度确定对象以给定速率行进多远以及朝哪个方向行进。

 速度=速率*方向 

在我的游戏中,我为球的刚体组件分配了值。 (我们将在另一篇文章中讨论Rigidbody组件)。 只知道刚体与Unity的物理引擎有关。 它负责在屏幕上移动游戏对象。 为球的刚体的速度分配一个值将沿(x,y,z)方向移动对象。

我只关心球的水平和垂直运动,因此我只使用(x,y)值进行比赛。