增加角色处于跳跃高峰的时间
Posted
技术标签:
【中文标题】增加角色处于跳跃高峰的时间【英文标题】:Increase the time of the character being at the peak of the jump 【发布时间】:2019-12-13 04:52:30 【问题描述】:我正在为 2d 平台游戏开发角色控制器 我正在使用 Unity3D 使用我自己的物理(不是标准物理和 RigidBody2D 组件)来实现它,无论如何我大部分都完成了它,但问题是跳跃,它很令人满意,但我希望角色在达到跳跃高峰时在空中停留更长时间,但不使用计时器左右,我的意思是,我希望角色在接近时升得更慢到跳跃峰,所以跳跃曲线变宽了。
我处理速度和运动的方式是这样的: - 我有一个表示当前速度的 Vector2 速度,它根据角色的当前状态设置每一帧(步行、跑步、空闲......) - 我有一个浮动重力,它是一个代表重力的固定浮动 - 当玩家跳跃时,我将它的velocity.y 设置为 jumpVelocity 并且每一帧,我都会从中减去 (gravity * Time.DeltaTime)。
我得到的跳跃曲线:
我想要的跳跃曲线:
在不重写我 50% 的代码的情况下,是否有任何简单的方法(更改因子或添加变量等)来实现这一目标? 在此先感谢:)
使用 cmets 中提到的 (gravity*time^2):
【问题讨论】:
尝试同时减小gravity
和jumpVelocity
从物理学的角度来看,你不能只增加水平速度来实现这个目标吗?
@Ruzihm 实际上只减少重力就足以实现该曲线但不能改变它,我的代码中的重力是从 maxJumpHeight 和 timeToJumpApex 两个其他变量计算出来的......跨度>
@plum0 从物理学的角度来看:你是对的,从游戏的角度来看:不!这里的水平速度是玩家的空中移动速度,刚好适合游戏,不能简单改变
我解决了这个问题,非常感谢大家 :) 这类问题很难解决,因为它们与游戏感觉有关,而不是数学和现实世界的物理,所以通常正常的物理方程无法解决主题,相反,人们应该尝试以一种在感觉正确之前不会影响其他事物的方式平衡变量和调整值,再次感谢:)
【参考方案1】:
在稍微更改代码后,我实现了一个简单的解决方案...
扩展 Sebastian Lague(一个了不起的 youtuber)的方法,现在可以水平(使用 timeToJumpApex
变量)和垂直(使用 maxJumpHeight
变量)缩放曲线:
gravity = -(2 * maxJumpHeight) / Mathf.Pow(timeToJumpApex, 2);
maxJumpVelocity = Mathf.Abs(gravity) * timeToJumpApex;
此方法还将为您计算重力... 无论如何,我的跳跃仍然感觉不太好,但这与数学和物理方程无关,也与实现问题无关,但事实证明,这条曲线并不是平台跳跃的最佳曲线......
编辑:我将重力应用于速度的方式没有改变,所以:
velocity += (gravity * Time.deltaTime);
【讨论】:
你改变之前的方程式是什么?很难准确说出您为解决问题所做的工作,因为导致问题的代码未包含在问题中。【参考方案2】:到达峰值的时间是通过设置来计算的
jumpVelocity - time * gravity = 0,
即
time = jumpVelocity / gravity.
如果你想让你的角色在空中停留更长时间,你可以增加
jumpVelocity
或减少gravity
。
不过,这也会导致跳得更高。
跳跃的高度是(https://en.wikipedia.org/wiki/Linear_motion#Equations_of_kinematics)
height = jumpVelocity * time - gravity/2 * time^2. (*)
随着时间的推移,你会得到
height = jumpVelocity^2 / (2*gravity),
上面的时间产生
time = 2*height / jumpVelocity. (**)
因此,例如在保持高度不变的情况下跳跃两倍的时间,由于 (**),您必须将 jumpVelocity
乘以 0.5,由于 (*),您必须将 gravity
乘以 0.25。
【讨论】:
Owww 谢谢你的方程式,他们帮了我很多:)【参考方案3】:您应该更改水平和垂直速度的比率。因此,您可以保持重力和跳跃速度不变并增加水平速度,或者降低重力和跳跃速度(按比例)。
【讨论】:
不幸的是,这两个选项都不可能:这里的水平速度是玩家的空中移动速度,它正好适合游戏,不能简单地改变,另一个是垂直速度和重力手是根据其他变量计算得出的:maxJumpHeight 和 timeToJumpApex,所以不能改成....以上是关于增加角色处于跳跃高峰的时间的主要内容,如果未能解决你的问题,请参考以下文章