如您所知,几个月前,我开始了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)值进行比赛。