我越靠近弹跳我的玩家

时间:2018-08-04 14:39:59

标签: c# unity3d game-physics

我正在从Unity中的DS游戏 Dragon Quest Heroes Rocket Slime 中重新创建运动系统。目前,我已经获得了令人满意的结果,但是还不是100%。

其中之一是my player bounces back from walls further on long distance slings than he does in the original game。 (左是我的娱乐,右是原始游戏)。显然,我无法确定游戏的制作方式以及用于吊索的确切数学/值,但是我从游戏中得到的一件事是:

播放器以恒定速度移动,同时向一个方向倾斜(不减速,他们只是停在某个点上)

这促使我相信游戏没有使用传统的速度机制,所以我做到了: 在伸展的同时,球员的“ pVelocity”(电位潜力)上升。当他们放手一点时,在curPlayerPosition创建+ pVelocity被创建。然后,我以恒定的速度将播放器移动到该点。我想解决弹跳太远的问题的想法是,获得从我甩到的位置到终点的距离,并让玩家弹跳越少,距离越大,距离就越小。

问题是,我不确定该如何做最后一部分。

这是我的代码:

Vector2 reflectedVelocity = Vector2.Reflect(pVelNormalized, foundHit.normal);
playerAnimator.SetFloat("VelocityX", reflectedVelocity.x);
playerAnimator.SetFloat("VelocityY", reflectedVelocity.y);


float DistanceFromOrigin = Vector3.Distance(slingOrigin, transform.position);
print(DistanceFromOrigin);
//ToDo: reflectedVelocity is lower the higher DistanceFromOrigin is.

我想到的另一个解决方案是,也许我对原始游戏中“速度”如何工作的想法是完全错误的,如果是这样,请告诉我它实际上是/看起来是如何完成的

1 个答案:

答案 0 :(得分:1)

  

reflectedVelocity越低,DistanceFromOrigin越高。

因此reflectedVelocity应该与DistanceFromOrigin呈反比关系

Vector2 reflectedVelocity = Vector2.Reflect(pVelNormalized, foundHit.normal);
float DistanceFromOrigin = Vector3.Distance(slingOrigin, transform.position);

if(DistanceFromOrigin == 0) DistanceFromOrigin = 0.00001f;//to avoid division by zero
reflectedVelocity *= (SomeConstant / DistanceFromOrigin);

playerAnimator.SetFloat("VelocityX", reflectedVelocity.x);
playerAnimator.SetFloat("VelocityY", reflectedVelocity.y);

您可以使用线性关系而不是非线性关系:

reflectedVelocity *= (SomeConstant - DistanceFromOrigin);