Wpis z mikrobloga

Cześć

Do przemieszczania obiektu zawsze używałem takiego kodu:
private void M1()
{
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");

if (x > 0)
{
rb.velocity = new Vector2(speed, rb.velocity.y);
}else if(x < 0)
{
rb.velocity = new Vector2(-speed, rb.velocity.y);
}
else
{
rb.velocity = new Vector2(0f, rb.velocity.y);
}
}
Ale chciałem teraz użyć tego:
private void M2()
{
a.x = Input.GetAxisRaw("Horizontal");
a.y = Input.GetAxisRaw("Vertical");
rb.MovePosition(rb.position + a * speed * Time.deltaTime);
}

W tym drugim przypadku, obiekt 2D po wystartowaniu gry spada powoli na planszę, a w pierwszym bardzo szybko.
Jaka jest tego przyczyna?

W obu przypadkach grawitacja jest ustawiona na 1 i się nie zmienia.
Nie rozumiem co wpływa w metodzie M1 na to, że obiekt opada szybciej na planszę (jak w grze Mario) niż w metodzie M2?

#unity3d #unity #programowanie
  • 7
@buhubuhu: Trochę poczytałem i z tego co widzę to przy MovePosition, jeżeli używam tego jak w metodzie M2, nie osiągnę tego co przy użyciu velocity, bo już nie mogę nadpisać Rigidbody2D.velocity.y, bo robię to przez a.y = Input.GetAxisRaw("Vertical");. Więc jedno albo drugie? Dobrze rozumiem?
@buhubuhu: Chciałem się tylko dowiedzieć co powoduje, że używając velocity, czyli tego: rb.velocity = new Vector2(speed, rb.velocity.y); obiekt spada w płaszczyźnie y przyspieszając. A używając transform.position tak się nie dzieje.
@rubesom:

Chciałem się tylko dowiedzieć co powoduje, że używając velocity, czyli tego: rb.velocity = new Vector2(speed, rb.velocity.y); obiekt spada w płaszczyźnie y przyspieszając. A używając transform.position tak się nie dzieje.


Bo to przyśpieszenie