c# - 如何在 Unity 中获得平滑的 2D 跳跃?
问题描述
我想让我的角色跳跃,但我的动作很慢。就像角色正在传送而不是缓慢上升一样。你有什么想法吗?我正在使用 tilemap 和Unity 2019.1.0f2
.
我已经尝试过:
rb.AddForce(Vector2.up * jumpForce)
,
rb.velocity = Vector2.up * jumpForce
,
rb.MovePosition(new Vector2(transform.position.x
, transform.position.y+jumpForce)
.
这是我的其余移动脚本,没有前面提到的代码:
public float speed;
public float jumpVelocity;
float timeBtwJumps = 0f;
float startTimeBtwJumps = 0.3f;
Rigidbody2D rb;
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
float horizontal = Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
Vector2 position = new Vector2(transform.position.x, transform.position.y);
rb.MovePosition(new Vector2(position.x + horizontal, position.y));
}
private void FixedUpdate()
{
if (Input.GetAxisRaw("Vertical") > 0f && timeBtwJumps <= 0f)
{
Jump();
timeBtwJumps = startTimeBtwJumps;
}
else
timeBtwJumps -= Time.deltaTime;
}
void Jump()
{
}
一切都源于 MonoBehaviour。这是我的刚体和播放器设置:
Body Type: Dynamic
Material: None
Simulated: true
Use Auto Mass: false
Mass:1
Linear Drag: 0
Angular Drag: 0.05
Gravity Scale:1
Collision Detection: Discrete
Sleeping Mode: Start Awake
Interpolate: None
Freeze Rotation: z-true
播放器具有默认设置的 Box Collider 2D。
请帮忙。提前致谢。
解决方案
如果您想要基于物理的跳跃,请不要使用 MovePosition。MovePosition 只会将刚体移动到取决于您的插值设置的位置。由于您的插值是无的,因此您会得到“非常滞后的运动”。
相反,您应该使用冲力。在您只尝试加速力之前。此外,您的水平运动也必须相应地改变以适应增加力量的方法。试试这样:
void Jump()
{
rb.AddForce(Vector2.up*jumpVelocity, ForceMode2D.Impulse);
}
要对此进行测试,您现在应该禁用水平移动。或者你可以做这样的事情:
private void Update()
{
float horizontal = Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
rb.AddForce(horizontal * Vector2.right);
}
还有几件事:
- 从不检查 FixedUpdate 循环内的输入!您的游戏可能会以 100 fps 的速度运行,并且取决于固定更新(之所以称为修复,是因为 unity 试图保持物理更新帧速率固定),您可能会错过按钮按下。
- 如果您使用 MovePosition,请仅在 FixedUpdate 中使用。
- 您可能想要更改检查跳跃输入的方式,也可能想要检查播放器是否接地。
-您还应该注意,在更新中使用 AddForce 作为加速力也应该避免。
推荐阅读
- html - 如何在 Angular 中做手风琴
- linux - 变量和双引号
- google-api - 当我使用 Drive API 连接到帐户时,我收到一封电子邮件,其中 Appname 为“QuickStart”
- php - 如何将来自 ajax 的响应数据填充到选择下拉列表中?
- react-native - 如何在反应原生的反应导航中从子选项卡导航器访问父路由
- python - Node JS and Python - 从 Node JS 发布图像到 Python REST API
- android - 对来自firebase数据库的recyclerview中的文本和图像使用不同的布局?
- multithreading - 既然加入保证顺序为什么我们需要在java中同步
- c# - 如何在 .Net Web API 中使用 BSON
- symfony4 - 如何在 symfony 4 中覆盖奏鸣曲管理包模板