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?
@rubesom: ogólna zasada jest taka że nie bawimy się z rb.velocity jeżeli nie wiemy co robimy. Jest dużo naprawdę prostych tutoriali dotyczących poruszania się postaci...
@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.
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.
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
Jest dużo naprawdę prostych tutoriali dotyczących poruszania się postaci...
EDIT: Skłamałem, Translate resetuje fizykę nie velocity.
Spadać może wolniej bo używasz Time.deltaTime (reprezentuje różnice w czasie od ostatniej klatki).
Bo to przyśpieszenie