C# 'de birlik halinde bir yukarıdan aşağı 2D oyun yapıyorum. Şu anda sadece hareket kurmak, ama daha önce anlayamadığım bir soruna rastladım. Oyun bir ızgarada kuruldu ve yukarı, aşağı, sağa ve sola hareket etmek için sadece ok tuşlarını kullanıyorum. Bu benim senaryom:Unity 2D C# garip hareket davranışı
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);
}
}
}
}
her yön için ifadeleri oyuncu odasının sınırlarını bırakmaz emin eğer ilk. Oluyor olan sinir bozucu şey hareket ederken, 0.05
, 0.1
, 0.15
, vs gibi amaçlanan güzel kare sayılarla başlar, ama sonra bir şekilde ders gider ve -0.05000001
, -7.450581e-09
, 0.04999999
, istedikleri yakın olan numaraları verir sayılar ama yeterince doğru değil. Herhangi bir fikir? Tüm öneriler takdir edildi.
, yüzdürmenin kesinliğinden dolayı değil mi? Yani, 0.0f 0.000000001f'ye eşit mi? – Ceros
bir çift daha iyi olur mu? – oscaro
Muhtemelen, tamsayıları kullanarak ızgara yapmaktan daha iyi olurdu. Ayrıca, bu 'Güncelleme' için yapardı. –