首页 > 解决方案 > 在 Unity 中如何解决 2D 碰撞中的弹跳问题?

问题描述

我的游戏是一个自上而下的 2D 游戏,当玩家在移动时与另一个物体发生碰撞时,玩家开始弹跳。我尝试使用弹力为 0 的 2D 物理材料,但并没有解决问题。我认为这与我的运动代码方式有关。我尝试使用 Rigidbody.MovePosition,但它不起作用,我的播放器出现故障。这是我的运动代码。

float horizontal = Input.GetAxis("Horizontal") * moveSpeed * Time.deltaTime;
float vertical = Input.GetAxis("Vertical") * moveSpeed * Time.deltaTime;

transform.Translate(new Vector2(horizontal, vertical));

标签: c#unity3d

解决方案


尝试在 FixedUpdate 内的 Rigidbody 上使用MovePosition方法,而不是更改玩家变换的位置。如果这不能解决问题,请尝试将玩家刚体的碰撞检测模式更改为连续。

在 Unity 中使用物理和刚体时,您可能希望在 FixedUpdate 方法中完成大部分与物理相关的事情。此方法与 Unity 的物理循环同步运行,并且所有物理计算都是在调用所有 FixedUpdate 方法后立即完成的。这允许看起来平滑的交互和物理。


推荐阅读