【发布时间】:2016-04-13 06:39:27
【问题描述】:
我正在用 C# 统一制作一个自上而下的 2D 游戏。目前刚刚开始设置运动,但我已经遇到了一个我无法解决的问题。游戏设置在一个网格中,我只是使用箭头键上下左右移动。这是我的脚本:
public class Player : MonoBehaviour
{
public float playerSpeed;
void FixedUpdate()
{
// Movement
if (transform.position.x < 0.25)
{
if (Input.GetKeyUp(KeyCode.RightArrow))
{
transform.position += new Vector3(playerSpeed, 0, 0);
}
}
if (transform.position.x > -0.3)
{
if (Input.GetKeyUp(KeyCode.LeftArrow))
{
transform.position += new Vector3(-playerSpeed, 0, 0);
}
}
if (transform.position.y < 0.15)
{
if (Input.GetKeyUp(KeyCode.UpArrow))
{
transform.position += new Vector3(0, playerSpeed, 0);
}
}
if (transform.position.y > -0.10)
{
if (Input.GetKeyUp(KeyCode.DownArrow))
{
transform.position += new Vector3(0, -playerSpeed, 0);
}
}
}
}
每个方向的第一个 if 语句是确保玩家不会离开房间的边界。正在发生的烦人的事情是,在移动时,它以漂亮的平方数开始,如 0.05、0.1、0.15 等,但随后不知何故偏离了轨道并给出了像 -0.05000001、@987654326 这样的数字@、0.04999999,与想要的数字很接近,但不够准确。有任何想法吗?所有建议都表示赞赏。
【问题讨论】:
-
不是因为浮点数的精度吗?我的意思是,0.0f 是否等于 0.000000001f ?
-
双倍会更好吗?
-
使用整数制作网格可能会更好。另外,
Update也可以。 -
@oscaro 这可能是因为统一的物理学。但是你为什么介意呢?
-
@DRKblade 有点烦人,因为我处理碰撞和其他事情的方式既愚蠢又低效。将对其进行更改以使其不愚蠢。