c# - Rigidbody2D:如何防止 Y 轴被 0 覆盖?
问题描述
public void MoveCharacter(float directionHori) //either -1 or 1
{
direction = new Vector2 (directionHori, 0); //new vector2 using passed x value (1 or -1). //BUG - passing in 0 as Y axis overrides gravity while player is moving.
rb.MovePosition(rb.position + direction * moveSpeed * Time.fixedDeltaTime); //apply movement
}
上面是我的 MoveCharacter 方法,当它被调用时,Y 轴被 0 覆盖,因此重力被禁用,允许玩家在他应该跌倒时飞行。这是一个 2D 横向卷轴,因此玩家不应该能够垂直移动(当然,跌落时除外)。我试过 direction = new Vector2 (directionHori, rb.Velocity.y); //用rb.Velocity替换0
然而,这会产生更奇怪的行为。任何帮助将不胜感激,我还是 Unity 的新手!非常感谢。
解决方案
而不是使用MovePosition
你需要自己计算最终位置的地方,你可以简单地调整velocity
类似
var velocity = rb.velocity;
velocity.x = direction * moveSpeed;
rb.velocity = velocity;
这样可以保持重力和垂直运动不变,并且Rigidbody2D
/物理引擎会为您进行计算;)
推荐阅读
- flutter - 登录用户时显示 CircularProgressIndicator
- linux - 将linux进程发送到后台而不按回车
- python - `IndexError: index 1 is out of bounds for axis 0 with size 1`在将数据集的元素乘以一个值后
- node.js - MongooseServerSelectionError:在节点 v17 中连接 ECONNREFUSED ::1:27017 并且 mongo 正在运行
- asp.net-core - 重新定位错误 - 未定义 GLIBC 符号;Manjaro Linux
- ios - UITableView 在滚动奇怪的白色间隙时停留在 UIView 后面
- jquery - 单击文件上传按钮时,Chrome 扩展选项卡会关闭
- powershell - 如何仅将键盘输入发送到特定应用程序
- r - 使用 GLMNET 和 CARET 预测新数据 - newx 中的变量数必须为 X
- java - 错误:“expo-modules-core”项目不包含在自动链接中