源引擎-运动代码:什么是"wishspeed"?

Source engine - movement code: What is "wishspeed"?

我最近一直在研究 Source 引擎。更具体地说,他们有 strafing/bunnyhopping 种运动。

https://github.com/ValveSoftware/source-sdk-2013/blob/56accfdb9c4abd32ae1dc26b2e4cc87898cf4dc1/sp/src/game/shared/gamemovement.cpp#L1779

这里是源引擎的实际移动代码。我的问题指向第 1779 和 1784 行。这里,wishspeed 的值是 wishdir's 大小。虽然当向量(wishdir)是归一化向量时,幅度不会也被归一化吗? (所以它的幅度为 1)

据我了解,这就是标准化后发生的情况。如果这是真的,为什么1784行的if语句中有if ( wishspeed != 0 && **(wishspeed > mv->m_flMaxSpeed)**),如果wishspeed为1?进一步查看代码,有更多暗示 wishspeed 不是 0 或 1,而是更高的值。

有人可以向我解释这是怎么可能的吗? wishspeed 应该归一化,怎么会超过 1?

谢谢!

在此页面上记录了该操作:

https://developer.valvesoftware.com/wiki/Vector

VectorNormalize() returns向量的原始长度。

developer.valvesoftware.comfloat VectorNormalize(vec) :

Divides the vector by its length, normalising it. Modifies the Vector and returns the old length.

wishspeed 采用 wishdir 标准化前的长度。