c# - 在 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));
解决方案
尝试在 FixedUpdate 内的 Rigidbody 上使用MovePosition方法,而不是更改玩家变换的位置。如果这不能解决问题,请尝试将玩家刚体的碰撞检测模式更改为连续。
在 Unity 中使用物理和刚体时,您可能希望在 FixedUpdate 方法中完成大部分与物理相关的事情。此方法与 Unity 的物理循环同步运行,并且所有物理计算都是在调用所有 FixedUpdate 方法后立即完成的。这允许看起来平滑的交互和物理。
推荐阅读
- javascript - Angular 先渲染组件,然后在 ng-If 中移除另一个组件
- java - 如何在 Java 中准确地将 Epoch 时间戳转换为 java.time.Instant 类型的对象?
- locust - 确定理想的工作人员数量和主服务器的 EC2 大小
- firewall - Power Query - 将文件路径动态传递给 File.Contents 函数
- c# - 通过用输入集的所有排列替换占位符从模板创建字符串
- optimization - 给定 2 级元素的值,如何有条件地从嵌套列表的 1 级删除元素?
- html - React setState 无法分配 fileList 而是分配第一个 fileName 的字符串
- javascript - 有没有编写简单的 Strapi 插件可以对数据库进行 CRUD 的示例?
- google-apps-script - 您如何根据另一个单元格显示/隐藏行?(Google Apps 脚本/表格)
- c++ - obj + mlt 3d 模型呈现错误的颜色