C# 离我越近,我的球员弹跳得越远

C# 离我越近,我的球员弹跳得越远,c#,unity3d,game-physics,C#,Unity3d,Game Physics,我在Unity中重新创建DS游戏《龙之旅英雄火箭黏液》中的移动系统。目前我已经取得了相当理想的成绩,但还不是100% 不同的一点是。(左边是我的娱乐,右边是原创游戏)。显然,我不知道游戏是如何制作的,也不知道他们用于投掷的确切数学/数值,但我从游戏中得到的一点是: 玩家以恒定速度移动,同时向一个方向投掷(没有减速,他们只是在某一点停止) 这让我相信游戏没有使用传统的速度机制,所以我做到了: 伸展运动时,运动员的pVelocity(潜在速度)上升。当它们释放时,将创建一个在curPlayerPos

我在Unity中重新创建DS游戏《龙之旅英雄火箭黏液》中的移动系统。目前我已经取得了相当理想的成绩,但还不是100%

不同的一点是。(左边是我的娱乐,右边是原创游戏)。显然,我不知道游戏是如何制作的,也不知道他们用于投掷的确切数学/数值,但我从游戏中得到的一点是:

玩家以恒定速度移动,同时向一个方向投掷(没有减速,他们只是在某一点停止)

这让我相信游戏没有使用传统的速度机制,所以我做到了: 伸展运动时,运动员的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.
我想到的另一个解决方案是,也许我对“速度”在原始游戏中如何工作的想法是完全错误的,如果是这样,请告诉我它实际上是如何做到的

距离原点越远,反射速度越低

因此,
reflectedVelocity
应该与
distance from origin

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);