Problem z grawitacją po osi y

Programowanie w Unity.

Problem z grawitacją po osi y

Postprzez rubesom » 17 Mar 2020, 23:00

Hej

Mam dwa kody do sterowania postacią w projekcie 2D:
Kod: Zaznacz wszystko
    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);
        }
    }

i:
Kod: Zaznacz wszystko
    private void M2()
    {
        a.x = Input.GetAxisRaw("Horizontal");
        a.y = Input.GetAxisRaw("Vertical");
       
        rb.MovePosition(rb.position + a * speed * Time.deltaTime);
    }


W pierwszym przypadku M1 po uruchomieniu gry, obiekt ze skryptem spada gwałtownie na platformę (tak jak postać w grze Mario). Ale w drugim przypadku spada bardzo powoli.
Co wpływa na to szybkie spadanie w skrypcie M1 i jak można to uzyskać w M2?
rubesom
 
Posty: 30
Rejestracja: 23 Paź 2013, 18:27
Has thanked: 0 time
Been thanked: 0 time

Re: Problem z grawitacją po osi y

Postprzez EvilArev » 17 Mar 2020, 23:36

W drugim przypadku mnożysz prędkość przez Time.deltaTime, czyli mniej więcej 0.0166. Warto to zachować (poczytaj o delta time), więc lepiej zwiększyć wartość "speed".
EvilArev
 
Posty: 387
Rejestracja: 14 Kwi 2013, 15:32
Has thanked: 0 time
Been thanked: 0 time

Re: Problem z grawitacją po osi y

Postprzez rubesom » 18 Mar 2020, 10:58

EvilArev napisał(a):W drugim przypadku mnożysz prędkość przez Time.deltaTime, czyli mniej więcej 0.0166. Warto to zachować (poczytaj o delta time), więc lepiej zwiększyć wartość "speed".


To chyba nie to. Zmieniłem speed z 2 na 20, usunąłem mnożenie przez Time.deltaTime i obiekt dalej spada bardzo powoli.
Nie wiem co może wpływać na takie zachowanie, bo w metodzie M1 coś takiego nie zachodzi.

Dodam jeszcze, że nie sprawia to jakiegoś dużego problemu ale wolał bym móc to kontrolować w skrypcie. Postać po prostu jak zaczyna się gra, ma spaść na planszę z pewnej wysokości i przy metodzie M2 wygląda to tak jak by była na księżycu. Gra jest 2D i nie mogę wyłączyć na obiekcie grawitacji, bo mam też zaimplementowane skakanie.
rubesom
 
Posty: 30
Rejestracja: 23 Paź 2013, 18:27
Has thanked: 0 time
Been thanked: 0 time

Re: Problem z grawitacją po osi y

Postprzez Neespa » 25 Mar 2020, 20:48

A nie powinno być:
Kod: Zaznacz wszystko
rb.MovePosition(rb.position + a.y * speed * Time.deltaTime);
?

Bo rozumiem że postać ma poruszać się tylko w 1 osi?
Awatar użytkownika
Neespa
 
Posty: 12
Rejestracja: 13 Kwi 2014, 11:37
Has thanked: 0 time
Been thanked: 0 time


Wróć do Skrypty

Kto jest na forum

Użytkownicy przeglądający to forum: Google [Bot] oraz 5 gości