离我越近,我的播放器弹得越远
Bouncing my player further the closer I am
我正在 Unity 中重建 DS 游戏 勇者斗恶龙英雄火箭史莱姆 中的移动系统。目前我得到了非常理想的结果,但不是 100%。
其中一个不同之处在于 my player bounces back from walls further on long distance slings than he does in the original game。 (左边是我的游戏,右边是原创游戏)。显然,我不知道游戏是如何制作的以及他们用于吊索的确切 maths/values 但我从游戏中得到的其中一件事是:
玩家在一个方向上以恒定速度移动(没有减速,他们只是停在某个点)
这让我相信游戏没有使用传统的速度机制,所以我这样做了:
拉伸时,玩家 'pVelocity' (potentialVelocity) 上升。当他们放手时,将创建一个在 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.
我想到的另一个解决方案是,也许我对 'velocity' 在原始游戏中的工作方式的想法是完全错误的,如果是这样,请告诉我实际上 is/looks 是如何工作的完成
reflectedVelocity is lower the higher DistanceFromOrigin is.
所以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);
我正在 Unity 中重建 DS 游戏 勇者斗恶龙英雄火箭史莱姆 中的移动系统。目前我得到了非常理想的结果,但不是 100%。
其中一个不同之处在于 my player bounces back from walls further on long distance slings than he does in the original game。 (左边是我的游戏,右边是原创游戏)。显然,我不知道游戏是如何制作的以及他们用于吊索的确切 maths/values 但我从游戏中得到的其中一件事是:
玩家在一个方向上以恒定速度移动(没有减速,他们只是停在某个点)
这让我相信游戏没有使用传统的速度机制,所以我这样做了: 拉伸时,玩家 'pVelocity' (potentialVelocity) 上升。当他们放手时,将创建一个在 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.
我想到的另一个解决方案是,也许我对 'velocity' 在原始游戏中的工作方式的想法是完全错误的,如果是这样,请告诉我实际上 is/looks 是如何工作的完成
reflectedVelocity is lower the higher DistanceFromOrigin is.
所以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);