测试玩家的期望移动是否超过一个幅度

本文关键字:一个 玩家 期望 移动 是否 测试 | 更新日期: 2023-09-27 18:12:55

假设我在Vector3中有一个点,我的FPSController(我使用Unity 5自带的标准FPSController)从这个Vector3移动了10个数量级。我不允许任何方向的移动,超过10级。理想情况下,我会预测玩家按下的移动方向,测试这个矢量,如果它低于10,那么它将允许移动继续进行。这样,如果你在10点,按"后退"键,你就不能移动了,但如果你按"前进"键,那就没问题了。

我知道我在这里有点抽象。据我所知,FPSController.cs脚本正在使用CharacterController组件。今晚我研究了FPSController代码一段时间,并注意到它正在对局部位置进行各种计算,但大小需要介于两个世界坐标之间。

我已经知道如何计算震级了,我只需要知道如何测试预期的方向。我感觉比我想的要简单?

测试玩家的期望移动是否超过一个幅度

你想太多了!与其考虑如何约束速度,不如考虑约束位置。看看Vector3 Vector3.ClampMagnitude(Vector3, float),它返回缩放到最大长度的向量。通过将玩家的位置"转换"到目标,锁定到最大长度,然后转换回世界坐标,你可以约束玩家的位置。

// target: the Vector3 you can't get too far from.
// distance: the float max distance from the target.
transform.position = Vector3.ClampMagnitude(transform.position - target, distance) + target;