c# - 团结一致的运动;非对角线,类似塞尔达
问题描述
因此,我正在使用 Unity 和 Visual Studio 进行测试,作为一个入门项目,我正在努力复制 Zelda (NES),并且从运动开始。
到目前为止,有很多卡顿,我已经想出了如何防止对角线移动,但我无法弄清楚下一部分。在游戏中,如果有 2 个输入时倾向于垂直移动,但如果你撞到墙,它会让你水平移动,直到没有任何东西阻挡你的垂直移动。
我什至不知道该怎么做。任何人都有可以为我设定正确方向的想法?或者也许只是一种更好的方法?我还在学习 C#
public float MoveSpeed;
public Rigidbody2D rb;
Vector2 movement;
void Update() {
MovementInput();
}
private void FixedUpdate() {
rb.velocity = movement * MoveSpeed;
}
void MovementInput() {
float mx = Input.GetAxisRaw("Horizontal");
float my = Input.GetAxisRaw("Vertical");
//This makes diagonal impossible, favoring vertical.
if (my != 0) {
mx = 0;
}
movement = new Vector2(mx, my).normalized;
}
解决方案
尝试比较横轴和纵轴的绝对值。最高的会给你一个好的方向。
if (Math.Abs(my) > Math.Abs(mx)) {
// up or down
} else {
// left or right
}
推荐阅读
- jquery - 链接到带有选项卡式内容的页面不起作用
- javascript - Moment.js 显示未来日期而不是过去
- google-apps-script - aufill 范围单元格默认值,当输入范围单元格返回默认值时
- python - 传递函数参数(元组内的dict)
- oracle - Oracle APEX - 选择列表中图标旁边的文本
- sendgrid - Sendgrid 不更新动态模板
- javascript - 为什么传递匿名函数时,`appendChild` 不能按预期工作?
- python - 从 Python 访问 minizinc 数据
- java - 不是有效月份,但数字数据类型 Java-Oracle
- r - 不同范围的时间序列值的平均值