【发布时间】: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 从物理学的角度来看:你是对的,从游戏的角度来看:不!这里的水平速度是玩家的空中移动速度,刚好适合游戏,不能简单改变
-
我解决了这个问题,非常感谢大家 :) 这类问题很难解决,因为它们与游戏感觉有关,而不是数学和现实世界的物理,所以通常正常的物理方程无法解决主题,相反,人们应该尝试以一种在感觉正确之前不会影响其他事物的方式平衡变量和调整值,再次感谢:)
标签: c# unity3d 2d game-physics