IKControl
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
IKControl instancje generują proceduralne pozy animacji za pomocą odwrotnej kinematyki (IK).Pozwalają ci sprawić, że postacie będą realistycznie reagować na swoje środowisko.
Na przykład możesz sprawić, że postać położy rękę na uchwycie drzwi dokładnie, a postać zrobi to niezależnie od swojej pozycji.IKControls zapewniają przewagę potrzeby tworzenia znacznie mniej animacji dla twojej gry, zapewniając twojemu doświadczeniu bardziej realistyczny i wykończony wygląd.
musi być dzieckiem lub z ustawionymi właściwościami wymaganymi, w przeciwnym razie nie będą miały żadnego wpływu.Wymagane właściwości są Type , EndEffector , Target , ChainRoot .Gdy te są ustawiać, moduł IkControl zmienia pozyę twojej postaci tak, jak określasz.Poniższy przykład kodu pokazuje, jak skonfigurować swoje pierwsze IKControl i rozpocząć tworzenie bardziej realistycznych animacji dla twojej gra.
Możesz używać IKControls, aby stworzyć postać:
- Obróć jego głowę i tułów, aby spojrzeć na punkt zainteresowania na świecie.
- Dostosuj pozycję stóp, aby odpowiedzieć na dynamiczny teren. Dostosuj jego nogi i stopy, aby umieścić je odpowiednio na terenie z kamieniami i zboczniami.
- Trzymaj broń i umieść jej ręce odpowiednio na uchwycie bez potrzeby tworzenia animacji dla każdej broni w gra.
- Celuj w punkt na świecie, aby końcówka lufy dokładnie wskazała na to, co chcesz strzelić. Szczególnie przydatna w grach strzelających z trzeciej osoby.
- Połóż ręce na kierownicy samochodu i podążaj za nim, gdy się obraca.
- O wiele więcej!
IKControl zastąpi animację dla wszystkich części między ChainRoot a EndEffector.Możesz włączyć/wyłączyć go za pomocą Enabled lub zmienić, jak duży mają wpływ na podstawową animację za pomocą Weight.Uważaj: jeśli nie skonfigurujesz swojego IKControls prawidłowo, możesz wygenerować złe i nierealistyczne pozy!
Przykłady kodu
This sample shows the basic setup for an IKControl that moves a character's left arm to reach for a point in the world.
local character = script.Parent.Character
local humanoid = character.Humanoid
local root = character.HumanoidRootPart
-- Create a new attachment to use as the IKControl.Target
local target = Instance.new("Attachment")
target.CFrame = CFrame.new(-1, 0, -1)
target.Parent = root
local ikControl = Instance.new("IKControl")
ikControl.Type = Enum.IKControlType.Position
ikControl.EndEffector = character.LeftHand
ikControl.ChainRoot = character.LeftUpperArm
ikControl.Target = target
ikControl.Parent = humanoid
Podsumowanie
Właściwości
Ostatnia część, w której jesteś zainteresowany przeniesieniem swojej postaci.Na przykład, górna ręka.Musi być przodkiem EndEffector i być BasePart lub Bone w twojej postaci.
Przełącza kontrolę włączoną i wyłączone. Domyślnie prawda.
Część, w której jesteś zainteresowany przeniesieniem, aby dotrzeć do Target.Na przykład ręka twojej postaci.Musi być potomkiem ChainRoot i być BasePart lub Bone w twojej postaci.
Dodatkowy przesunięcie zastosowane na górze EndEffector w jego lokalnej przestrzeni, aby zmienić, gdzie się porusza.
Dodatkowy przesunięcie zastosowane na górze Target do zmiany, gdzie się porusza EndEffector.
Opcjonalna instancja, która określa, w jaki sposób łańcuch się zgina. Możesz użyć tego, aby określić, w jaki sposób łokieć lub kolano się zgina.
Określa kolejność rozwiązywania kontroli. Wartości wyższe mają wyższy priorytet.
Określa średnią liczbę sekund, jaką zajmuje przejście EndEffector do Target.
Obiekt, do którego EndEffector dotarza lub wskazuje.Może to być wszystko, co ma pozycję na świecie, takie jak BasePart , Attachment , Bone lub Motor6D .
Określa, w jaki sposób rozwiązanie spełnia to kontrolę.
Określa wagę celu kontroli IK. Powinien znajdować się w zakresie [0, 1].
Metody
Właściwości
ChainRoot
Poprzez określenie ChainRoot i EndEffector, pouczasz IKControl, że można przesuwać i obracać wszystkie części między dwoma, aby przenieść EndEffector do Target.Na przykład, jeśli określisz LeftHand jako EndEffector i LeftUpperArm jako ChainRoot, ster przesuwa 3 części: LeftHand, LeftLowerArm i LeftUpperArm.Unikaj ustawiania ChainRoot jako rzeczywistego korzenia postaci, ponieważ to produkuje nierealistyczne wyniki.
Enabled
Właściwość ta pozwala przełączać kontrolę IK włączoną i wyłączone.Jest włączony domyślnie.Gdy Enabled jest fałszywe, kontrola IK jest wyłączona i nie jest rozwiązywana przez podstawowy rozwiązacz.
EndEffector
The EndEffector opisuje ostatnią część w łańcuchu twojej postaci, którą chcesz wpłynąć.Na przykład może to być ręka, gdy chcesz przesunąć całą rękę, aby dotrzeć do punktu.Może to być BasePart na postaci, która ma Motor6D jako dziecko, Motor6D bezpośrednio, Bone lub Attachment.Oś obrotu wybranego EndEffector przenosi się do Target, więc możesz użyć Attachments , aby zmodyfikować, który punkt z BasePart powinien dotrzeć do Target .
EndEffectorOffset
Odległość końcowego efektu jest dodatkowym CFrame zastosowanym na górze Target``Datatype.CFrame, który wytwarza ostateczny CFrame używany do umieszczenia EndEffector .Domyślnie jest to tożsamość CFrame, więc jeśli nie ją ustawisz, nie będzie miała żadnego wpływu, a EndEffector korzysta z Target``Datatype.CFrame bezpośrednio, co jest określone w lokalnej przestrzeni EndEffector .
Alternatywnie możesz używać załączników, ustawiając załącznik jako EndEffector, który przenosi go do Target zamiast do części, do których jest przymocowany, co skutkuje uzyskaniem tego samego wyniku.
Możesz także użyć EndEffectorOffset , aby zmodyfikować, na który osi EndEffector powinien wskazywać Target podczas używania LookAt jako Type .
Offset
Odległość jest dodatkową CFrame zastosowaną na górze Target``Datatype.CFrame, która wytwarza ostateczną CFrame używaną do umieszczenia EndEffector .Jest tożsamość domyślna, więc jeśli nie ją ustawisz, nie będzie miała żadnego wpływu, a będzie używać bezpośrednio .Możesz go animować, aby tworzyć animacje proceduralne, takie jak pisanie na klawiaturze.Jest przydatny, gdy Target i EndEffector nie są zgodne i musisz to naprawić za pomocą dodatkowej rotacji lub tłumaczenia.
Pole
The Pole jest opcjonalną Instance która daje ci kontrolę nad tym, w jaki sposób części pośrednie w twojej postaci powinny się zgiąć.Może to być wszystko, co ma pozycję na świecie, takie jak BasePart , Attachment , Bone , Motor6D .Domyślnie jest to nil.Kiedy to określisz, podstawowy rozwiązacz sprawi, że części będą się do niego zginać.Kiedy jest nil, rozwiązanie spróbuje zgiąć łokcie i kolana w odpowiedni sposób w oparciu o kończynę postaci.Kończyna będzie "Ramię", gdy wybierzesz jako albo Lewe ramię lub Prawe ramię i jako odpowiedni Lewe ramię lub Prawe ramię , a będzie to "Noga", gdy wybierzesz jako albo Lewe ramię lub Prawe ramię .W każdym innym przypadku, jeśli nie określisz pola, łańcuch może nie skręcić się tak, jak oczekujesz.
Priority
Gdy wiele kontroli jest aktywnych na postaci, kolejność, w której są rozwiązywane przez podstawowy system, wpływa na ostateczną generowaną pozę.Zmieniając tę wartość, określasz kolejność, w której spełnione są kontrolki.Wyższe wartości mają wyższy priorytet, a wyższe priorytetowe kontrolki rozwiązuje się później, ponieważ ich wynik może zastąpić poprzedni wynik innych elementy sterujące.Jeśli masz wiele kontroli IK na postaci i jedna jest ważniejsza od drugiej, określ niższy priorytet dla niej.Domyślnie wynosi 0, co oznacza, że wszystkie kontrolki mają ten sam priorytet.
SmoothTime
Ta wartość określa średnią liczbę sekund, jakie zajmuje osiągnięcie EndEffector przez Target.Zachowanie jest takie, jak w przypadku krytycznie wygłuszonych sprężyn, gdzie szybkość zmian jest proporcjonalna do odległości do celu i nie występują oscylacje, gdy zbliżasz się do celu.Mniejsze wartości tworzą szybszą konwergencję, a większe wartości tworzą wolniejszą konwergencję.Wartość 0 wyłącza wygładzanie.Domyślną wartością jest 0.05, aby zapewnić bardzo niewielką wygładzę, która sprawia, że ruch wydaje się realistyczny.
Target
The Target reprezentuje punkt ( CFrame ) w świecie, do którego chcesz, aby EndEffector dotarł.Dokładne zachowanie dotarcia można ustawić za pomocą właściwości Type, a dodatkowe Offset można nałożyć na nią, aby ją zmodyfikować.Jeśli ustawisz Target, który zostanie przeniesiony przez fizykę lub skrypt, w każdym ramie IKControl spróbuje go zaspokoić, automatycznie aktualizując punkt docelowy.
Zmieniając Type, możesz zmienić zachowanie kontroli. Są to dostępne opcje:
- Transformacja: jest to pełna ograniczenie 6-DoF. Dostosowuje EndEffector``Datatype.CFrame do tej z Target .
- Pozycja: dostosowuje pozycję EndEffector do pozycji Target.
- Rotacja: dostosowuje rotację EndEffector do rotacji Target.
- LookAt: przemieszcza i orientuje całą łańcuch, aby wykonać osię (domyślnie osią w przód) na punkcie EndEffector na pozycji na świecie określonej przez Target.
Weight
Możesz kontrolować, jak dużo dana kontrola wpływa na pozę postaci za pomocą tej właściwości.Wartości powinny być w przedziale [0, 1].0 oznacza brak efektu, a 1 oznacza pełny efekt kontroli IK.Wartości poza tym zakresem są obcinane.Płynne zmienianie tej wartości pozwala na wymieszanie lub wyłączenie określonej kontroli, aby uniknąć drgań.Domyślnie jest to 1.
Waga określa czynnik interpolacji między końcowym efektem a celem IK.Ustawienie wagi na 0 nie wyłącza kontroli IK, ponieważ inne czynniki, w tym czynnik wygładzania SmoothTime i Pole, nadal mogą zmieniać pozy.Aby naprawdę wyłączyć kontrolę IK, zmień właściwość Enabled na fałsz.