测试玩家所需的移动是否超过幅度?

时间:2015-09-15 03:39:09

标签: c# unity3d

说我在Vector3中有一个点,而我的FPSController(我使用Unity 5附带的标准版本)会从这个Vector3移动10级。我希望不允许在任何方向上移动超过10级。理想情况下,我会预测玩家向哪个方向移动,测试该向量,如果它低于10的幅度,那么它就会出现问题。允许运动继续进行。这样一来,如果你在10点并按下"返回",你将无法移动但是如果按下"转发"那没问题。

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

我知道如何计算幅度,我需要知道的是如何测试预期的方向。我觉得它比我想象的容易吗?

1 个答案:

答案 0 :(得分:0)

你正在思考这个!不要考虑如何约束速度,而是考虑约束位置。查看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;