Problem z IK w Unreal Engine 4


#1

Dzień dobry. Na wstępie chciałem zaznaczyć, że jest to mój pierwszy projekt w UE4 i w niektórych sprawach jestem jeszcze zielony. Tworzę grę w stylu souls-like, do portfolio. Dodałem poszczególne bronie, również dwuręczne. Pojawił się problem z “przyklejeniem” drugiej (lewej) ręki do broni. Szukałem podpowiedzi w Internecie ale jak coś znalazłem to albo mocno różniło się od tego co potrzebuje albo nie działało tak jak powinno. Próbowałem wykorzystać Two Bone IK oraz FABRIK, jednak nie przyniosło to żadnych efektów. Poniżej krótkie omówienie:

Na pierwszym screenie jest animacja indle wraz z FABRIK. Wartość LeftHandPosition jest ustawiana w Evnet Graph za pomocą funkcji GetWeaponSocket:

Wartość zmiennej RightHandEQWeapon jest ustawiana w momencie wyposażania konkretnej broni. W Skeletonie broni jest dodany socket LeftHandSocket.

Poniżej jeszcze screen z odpalonej gry przy ustawieniach FABRIK z pierwszego screena:

Podsumowując: W momencie wyposażania(dodania) broni dwuręcznej do ręki następuje sprawdzenie co to za broń, następnie pobierana jest nazwa socket’u i w zależności od jego położenia druga ręka powinna “przykleić się” do konkretnego miejsca na broni. A przynajmniej w teorii…

Jeżeli ktoś ma jakiś pomysł lub wie co robię źle to bardzo byłbym wdzięczny za pomoc.

Pozdrawiam Serdecznie.


#2

Ustaw Alpha na 1.0, bo inaczej FABRIK nie ma wpływu na szkielet.


#3

Dzięki za odpowiedź. Ustawiłem i rzeczywiście jest lepiej. Ręka znajduje się w okolicy socketa…ale nie jest to niego przyklejona :confused: Poniżej widać dokładnie jak to wygląda.

RP_GP_28_06_2021

Lewa ręka znajduje się na odpowiedniej pozycji, ale nie “przykleja się” do broni. Może jest to wina animacji? Sam już nie wiem…


#4

Jeżeli to jest IK od ramienia do dłoni, to może zwyczajnie nie sięga do socketa (kości się nie rozciągają) - możesz spróbować przesunąć socket niżej i sprawdzić czy się przyklei.
Sprawdź też czy ten “LeftHandPosition” aktualizuje się w każdej klatce, czy ustawiłeś go raz i tylko pobierasz zmienną. Powinien aktualizować się co klatkę, bo dzida się porusza i w każdej klatce socket jest trochę w innym miejscu.


#5

Poprawiłem pozycję socketa, ale niestety nic to nie dało. Co do LeftHandPosition to jest on aktualizowany w każdej klatce. Co więcej, w momencie w którym postać przechodzi z idle do np. biegu, lewa ręka wygląda tak jakby próbowała aktualizować swoją pozycję względem ostatniej pozycji socketu na broni. Dobrze widać to na filmiku:

FR_GP_29_06_2021

Testowałem również inne bronie i efekt jest identyczny. Oprócz tego, że ręka się nie klei do broni to również podczas ruchu postaci nienaturalnie zmienia swoją pozycję.


#6

Kurcze ciężko mi coś wymyślić na sucho…

Ja bym spróbował na Twoim miejscu TwoBone IK, ma dużo prostszą budowę niż FARBIK i powinien być bardziej przewidywalny :stuck_out_tongue:


#7

(wpis wycofany przez autora, zostanie automatycznie usunięty za 24 godziny, chyba że zostanie oflagowany)


#8

Tak jak radziłeś użyłem Two Bone IK. Rzeczywiście dużo lepiej to wygląda:

Co prawda ręka jest przyklejona, ale trochę “pływa”. Nie wiem czy da się to jakoś jeszcze poprawić. Ze swojej strony chciałbym Ci bardzo podziękować za pomoc :smiley:


#9

Nie ma sprawy, dość sprawnie nam poszło :smiley: