IKControl 인스턴스는 역방향 기네마틱(IK)을 사용하여 절차 애니메이션 포즈를 생성합니다.캐릭터가 환경에 실감 있게 반응하도록 허용합니다.
예를 들어, 캐릭터가 문 손잡이에 정확히 손을 올릴 수 있고, 캐릭터는 위치와 독립적으로 그렇게 할 것입니다.IKControls는 게임에 대한 애니메이션을 훨씬 적게 만들어야 하고 경험에 더 현실적이고 세련된 느낌을 주는 장점을 제공합니다.
IKControls 는 자식이어야 하며 Humanoid 또는 AnimationController 와 함께 있어야 하며 Animator 와 모든 필수 속성이 올바르게 설정되어야 하고, 그렇지 않으면 효과가 없습니다.필수 속성은 Type , EndEffector , Target , ChainRoot 입니다.이들이 설정되자마자 IkControl은 지정한 대로 캐릭터의 포즈를 수정합니다.다음 코드 샘플은 첫 번째 IKControl를 설정하고 게임에 대한 더 현실적인 애니메이션을 만들기 시작하는 방법을 보여줍니다.
IKControls를 사용하여 캐릭터를 만들 수 있습니다:
- 머리와 몸통을 회전하여 세계의 관심 지점을 보세요.
- 동적 지형에 반응하여 발 위치를 변경합니다. 바위와 경사로가 있는 지형에 발과 다리를 배치하도록 다리와 발을 조정합니다.
- 총을 들고 게임의 각 총에 대한 애니메이션을 만들 필요 없이 그립에 적절하게 손을 배치하십시오.
- 세계의 한 지점을 조준하여 총의 팁이 정확히 당신이 쏘고 싶은 것에 맞게 됩니다. 특히 세 번째 인싸 슈터에서 유용합니다.
- 차의 조종 장치에 손을 대고 회전할 때 따라가세요.
- 훨씬 더!
IKControl 는 ChainRoot 와 EndEffector 사이의 모든 부품에 대한 애니메이션을 재정의할 것입니다.Enabled 또는 Weight 을 사용하여 활성화/비활성화할 수 있거나 기본 애니메이션에 대한 효과를 변경할 수 있습니다.주의하세요: 제대로 설정하지 않으면 IKControls 나쁘고 비현실적인 포즈를 생성할 수 있습니다!
코드 샘플
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
요약
속성
캐릭터를 이동하려는 마지막 부분.예를 들어, 상완입니다.조상이 EndEffector 이어야 하고 캐릭터에서 BasePart 또는 Bone 이어야 합니다.
컨트롤을 켜고 끕니다. 기본값은 참입니다.
이동하여 Target 도달하는 데 관심이 있는 부분.예를 들어, 캐릭터의 손.ChainRoot 의 후손이어야 하고 캐릭터에서 BasePart 또는 Bone 이어야 합니다.
이동할 위치를 변경하기 위해 로컬 공간에서 EndEffector 위에 추가 오프셋을 적용합니다.
Target에 추가 오프셋을 적용하여 이동하는 EndEffector의 위치를 변경함.
체인이 구부러지는 방향을 결정하는 선택적 인스턴스입니다. 이를 사용하여 엘보 또는 무릎이 구부러지는 방향을 지정할 수 있습니다.
컨트롤이 해결되는 순서를 지정합니다. 더 높은 값은 우선 순위가 더 높습니다.
EndEffector에서 Target에 원활하게 도달하는 데 걸리는 평균 초 수를 지정합니다.
EndEffector에서 도달하거나 가리키는 개체.세계에서 위치를 가진 모든 것, 예를 들어 BasePart , Attachment , Bone 또는 Motor6D 일 수 있습니다.
솔버가 이 컨트롤을 만족시키는 방법을 지정합니다.
IK 컨트롤 대상의 무게를 지정합니다. [0, 1] 범위여야 합니다.
메서드
속성
ChainRoot
ChainRoot 와 EndEffector 를 지정하여 모든 부품을 두 사이에서 이동하고 회전할 수 있도록 지시하고, IKControl 에서 EndEffector 을 이동하고 Target 로 이동하도록 지시합니다.예를 들어, LeftHand를 EndEffector로, LeftUpperArm을 ChainRoot로 지정하면 컨트롤이 3부분을 이동합니다: LeftHand, LeftLowerArm, 그리고 LeftUpperArm.실제 문자의 루트로 ChainRoot를 설정하지 않도록 하세요, 그렇지 않으면 비현실적인 결과가 생성됩니다.
EndEffector
EndEffector 는 당신이 영향을 주고 싶은 캐릭터의 체인의 마지막 부분을 설명합니다.예를 들어, 전체 팔을 움직여 포인트에 도달하려는 경우 손일 수 있습니다.그것은 문자에서 BasePart 일 수 있으며, 그 자식으로 Motor6D 가 있고, 직접 Motor6D 또는 Bone 또는 Attachment 일 수 있습니다.선택된 의 피벗이 이동하여 에 도달하는 지점을 수정할 수 있으므로 를 사용하여 어떤 가 도달해야 하는지를 수정할 수 있습니다.
EndEffectorOffset
최종 효과 오프셋은 최종 효과를 배치하기 위해 사용된 마지막 의 위에 추가로 적용된 것입니다.기본적으로 ID CFrame이므로 설정하지 않으면 효과가 없으며, 는 로컬 공간의 에서 직접 사용하는데, 이는 에 지정되어 있습니다.
대신, 첨부 파일을 사용하여 첨부 파일을 EndEffector로 설정하고 부착된 부품 대신 Target로 이동하여 동일한 결과를 효과적으로 얻을 수 있습니다.
또한 EndEffectorOffset를 사용하여 어떤 축이 EndEffector에서 가리키는지 수정할 수 있으며, Target을 LookAt으로 사용할 때 어떤 축이 Type에 가리키는지 수정할 수 있습니다.
Offset
오프셋은 최종 배치에 사용된 최상위 의 위에 추가 적용된 오프셋으로, 최종 배치에 사용된 최상위 배치에 사용됩니다.기본적으로 식별자이므로 설정하지 않으면 효과가 없으며 는 직접 을 사용합니다.키보드에 입력하는 절차적 애니메이션과 같은 애니메이션을 만들기 위해 그것을 애니메이션할 수 있습니다.Target 와 EndEffector 가 정렬되지 않고 추가 회전이나 번역으로 수정해야 할 때 유용합니다.
Pole
The Pole 는 캐릭터의 중간 부품이 어떻게 구부러져야 하는지에 대한 제어를 제공하는 선택적 Instance입니다.세계에서 위치를 가진 모든 것, 예를 들어 BasePart , Attachment , Bone , Motor6D 일 수 있습니다.기본값은 nil.지정하면 기본 해결기가 부품을 그쪽으로 구부리게 합니다.When it is nil 일 때, 솔버는 캐릭터의 사지에 따라 적절하게 팔꿈치와 무릎을 구부리려고 시도합니다.선택하면 왼쪽 팔 또는 오른쪽 팔 중 하나가 "팔"이 되고, 해당 왼쪽 상완 또는 오른쪽 상완 중 하나 또는 해당 왼쪽 상완 또는 오른쪽 상완 중 하나가 "다리"가 되며, 선택하면 해당 왼쪽 상완 또는 오른쪽 상완 중 하나 또는 해당 오른쪽 상완 또는 오른쪽 상완 중 하나가 "다리"가 됩니다.다른 모든 경우에서, 봉을 지정하지 않으면 체인이 예상대로 구부러지지 않을 수 있습니다.
Priority
캐릭터에 여러 컨트롤이 활성화되어 있을 때, 기본 시스템에서 해결되는 순서는 최종 생성된 포즈에 영향을 줍니다.이 값을 변경하여 컨트롤이 만족하는 순서를 지정합니다.더 높은 값은 더 높은 우선 순위를 가지며, 더 높은 우선 순위의 컨트롤은 나중에 해결되므로 결과가 다른 제어이전 결과를 재정의할 수 있기 때문입니다.캐릭터에 여러 IK 컨트롤이 있고 그 중 하나가 다른 것보다 더 중요하면 우선 순위를 낮게 지정하십시오.기본적으로 0이므로 모든 컨트롤의 우선 순위가 동일합니다.
SmoothTime
이 값은 EndEffector에서 도달하기까지 평균 초 수를 지정합니다.This value specifies the average number of seconds that it takes for the to reach the Target .동작은 변화 속도가 대상에 대한 거리와 비례하고 대상에 접근할 때 진동이 없는 치명적으로 댐핑된 스프링의 동작입니다. The behavior is that of a critically-damped spring, where the rate of change is proportional to the distance to the target and no oscillations are present when approaching the target.더 작은 값은 더 빠른 융합을 만들고, 더 큰 값은 더 느린 융합을 만듭니다.0의 값은 부드러움을 비활성화합니다.기본값은 0.05로 움직임이 현실감 있게 느껴지도록 매우 약간의 부드러움을 제공합니다.
Target
Target 는 세계에서 귀하의 CFrame 가 도달하기를 원하는 지점(EndEffector)을 나타냅니다.도달의 정확한 동작은 Type 속성을 통해 설정할 수 있으며, 이 위에 추가 Offset 를 적용하여 수정할 수 있습니다.물리 또는 스크립트로 이동될 Target 를 설정하면, 각 프레임에서 IKControl 가 그것을 만족시키려고 시도하고, 도달할 점을 자동으로 업데이트합니다.
Type를 변경하여 컨트롤의 동작을 변경할 수 있습니다. 사용 가능한 옵션은 다음과 같습니다.
- 변환: 전체 6축 제약 조건입니다. EndEffector``Datatype.CFrame 를 Target 의 것과 맞춥니다.
- 위치: 위치 EndEffector 를 위치 Target 와 일치시킵니다.
- 회전: 회전 EndEffector 을 회전 Target 과 일치시킵니다.
- LookAt: 전체 체인을 이동하고 방향을 조정하여 축(기본적으로 앞쪽 축)을 지점에서 세계에서 지정된 위치에 배치합니다(기본적으로 앞쪽 축).
Weight
이 속성을 사용하여 지정된 컨트롤이 캐릭터 포즈에 미치는 영향을 얼마나 제어할 수 있습니다.값은 [0, 1] 범위에 있어야 합니다.0은 효과가 없음을 의미하고, 1은 IK 컨트롤의 전체 효과를 의미합니다.이 범위 외의 값은 잘립니다.이 값을 부드럽게 변경하면 특정 컨트롤을 혼합하거나 제거하여 흔들림을 방지할 수 있습니다.기본값은 1입니다.
무게는 엔드 이펙터와 IK 대상 사이의 인터폴레이션 요소 비율을 결정합니다.무게를 0으로 설정하면 IK 컨트롤이 비활성화되지 않으며, SmoothTime 부드러움 요소 및 봉과 같은 다른 요소가 여전히 포즈를 변경할 수 있기 때문입니다.IK 컨트롤을 완전히 비활성화하려면 Enabled 속성을 거짓으로 설정합니다.