Autor Wątek: unity, zmiana kierunku grawitacji, wsiąkanie w podłogę  (Przeczytany 1297 razy)

Offline smerf123

  • Użytkownik
    • Projektowanie gier

# Kwiecień 11, 2016, 18:11:03
Jak sprawić aby postać (kapsuła) wsiąkała przez niebieskie deski przy okazji zmieniając grawitację zgodnie z osią deski? W planie wsiąkanie następuje po wciśnięciu klawisza, następuje pauza na czas animacji obkręcania się kamery, po tym kapsuła jest już po drugiej stronie deski (do góry nogami względem pozycji wyjściowej). Z pauzą nie mam problemu i obrotem kamery nie mam problemu, jednak z wsiąknięciem i zmianą grawitacji już tak.
Deski mogą występować pod dowolnym kątem więc zmiana osi grawitacji też może być różna. Deski mogą być różnej grubości. Niektóre deski mogą być niewsiąkalne. Deski mogą mieć też różne kształty.
Domyślam się, że będę musiał tworzyć raya w kierunku punktu do najbliższej deski, przejść przez pierwszą płaszczyznę i wykonać obliczenia związane z przeciwległą płaszczyzną deski... ale jak nie wiem.
Poniżej taki obrazek poglądowy.

Offline Mr. Spam

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

Offline JasonVoorhees

  • Użytkownik
    • The Immortal Life of the Son of Jay

# Kwiecień 12, 2016, 01:34:03
Na czas wsiąkania przełącz Kinematic swojego rigidbody na true - nie będzie wtedy działać na niego fizyka i możesz swobodnie zmieniać skalę, rotację i położenie obiektu.

Żeby wykryć deskę pod graczem dobrze by było zrobić raycast w kierunku -transform.up (czyli w dół względem kapsuły).

Przesiąkanie możesz zrobić w Update (rozpisując cały proces na stany - enum), albo napisz Coroutine, która zrobi wszystko po kolei.

Deska, przez którą nie możesz przesiąknąć może mieć przypisany odpowiedni tag, albo skrypt, który ma wartość typu bool. Kiedy trafisz raycastem w deskę, to próbujesz złapać ten skrypt ( if (other.gameObject.GetComponent<SkryptDeski>().przesiakalna) StartCoroutine(Przesiaknij()); )

Grawitację powinieneś zmienić natychmiastowo po przesiąknięciu, a także cały czas podczas chodzenia postaci - bo chyba taki efekt chcesz uzyskać. Wektor grawitacyjny powinien wynosić odwrotność wektora normalnego raycastowanej deski.
« Ostatnia zmiana: Kwiecień 12, 2016, 01:36:30 wysłana przez JasonVoorhees »

Offline smerf123

  • Użytkownik
    • Projektowanie gier

# Kwiecień 12, 2016, 11:11:12
Mam wrażenie, że czegoś nie zrozumiałem lub się nie do końca dogadaliśmy.

Deska może mieć np kształt trójkąta, tak więc po wsiąknięciu grawitacja może zmieniać się różnie w zależności od tego w którym miejscu stoję (45 stopni w prawo lub w lewo na przykład).

Ciągle nie jestem pewien jak to wykonać.
Raycastować mam zamiar w kierunku najbliższego obiektu, który ma tag 'przesiąkalne', bo kapsuła może skakać i wsiąkać też w ściany.
Dodatkowe pytanie: Mogę zmienić kierunek grawitacji jedynie dla mojej kapsuły pozostawiając cały świat normalnie? Tzn domyślam się, że tak, ale też nie wiem, gdzie tego szukać.