Autor Wątek: odwrocenie fizyki  (Przeczytany 1469 razy)

Offline Gimer

  • Użytkownik
    • Portfolio

# Marzec 12, 2015, 10:20:32
Czesc,

Jaki polecacie sposob na odwrocenie fizyki na czesci sceny?

Przyklad: gracz idzie sobie po ziemi. Podskakuje i opada w kierunku podlogi. Idzie dalej przekracza bariere i odraca sie ladujac na suficie, teraz tez podskakuje ale przyciaga go sufit, a nie podloga.

Bez polskich znakow, bo pisze na tab.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline laggyluk

  • Użytkownik
    • twitter

  • +1
# Marzec 12, 2015, 10:53:39
Physics.gravity = -Physics.gravity

Offline Rethil

  • Użytkownik

  • +3
# Marzec 12, 2015, 12:30:45
Chodzi ci o samo odwrócenie grawitacji, czy o odwrócenie całej fizyki?

Do odwrócenia grawitacji t tak jak pisze laggyluk wystarczy Physics.gravity = -Physics.gravity tylko to odwróci grawitację na całej scenie - wszystko co powinno spadać w dół, zacznie się unosić. Alternatywą jest oznaczenie flagi na rigidbody gracza useGravity = false i pokombinowanie z dodawaniem siły. Spróbowałbym dodać w FixedUpdate rigidbody.AddForce(-Physics.gravity). Nie robiłem tego, ale powinno się udać.

Odwrócenie całej fizyki to dużo bardziej skomplikowana sprawa i musiałbyś pewnie napisać sobie nowy kontroler fizyki, zamiast korzystać z gotowca. Odwrócenie wszystkich sił oraz zmiana odbijania i tarcia to coś, co może być szczególnie kłopotliwe, ale nie niemożliwe. Teoretycznie upływ czasu również jest częścią fizyki, ale taką zmianę dobrze opisuje Jonathan Blow w https://www.youtube.com/watch?v=tSeYShR-OG0

Offline Gimer

  • Użytkownik
    • Portfolio

# Marzec 12, 2015, 13:27:11
Wlasnie chodzi mi o czesciowe odwrocenie. Chcialbym by postac zaleznie od tego gdzie sie znajdzie zachowywala sie inaczej ale bez ruszania przedmiotow w innych miejscach sceny.

Jeszczcze nie zaczalem programowac i szukam lepszej opcji niz sprawdzanie w kazdej klatce velocity i dodawanie AddForce.

Poczekam do wieczora. Moze ktos na cos wpadnie ☺

Pamietajcie, kazdy pomysl jest dobry

Offline Snejk47

  • Użytkownik

  • +2
# Marzec 12, 2015, 14:08:27
Możesz (patrzyłem na bullet) zmienić grawitacje dla jednego ciała.

#pseudo
if (player.position.x > 123)
    player.setGravity(-player.getGravity());


Oczywiście musisz dodać jakąś flagę czy coś bo się będzie co klatkę zmieniała.

Offline Gimer

  • Użytkownik
    • Portfolio

# Marzec 12, 2015, 15:09:01
O to chodzilo ☺

Offline Gimer

  • Użytkownik
    • Portfolio

  • +1
# Marzec 13, 2015, 14:10:37
Skończyło się na dodaniu komponentu Rigidbody i zmianie parametru gravity scale na bardziej odpowiedni w danym momencie. Działa wyśmienicie :)

W metodzie OnTriggerExit:
Rigidbody2D rb = c.gameObject.GetComponent <Rigidbody2D>();

rb.gravityScale = -rb.gravityScale;