Constraint 컴포넌트는 게임 오브젝트의 위치, 회전 또는 확대/축소를 다른 게임 오브젝트에 연결합니다. 제약이 있는 게임 오브젝트는 연결된 게임 오브젝트와 마찬가지로 이동, 회전 또는 확대/축소됩니다.
Unity에서 지원하는 제약 컴포넌트 유형은 다음과 같습니다.
Aim: 제약된 게임 오브젝트를 연결된 게임 오브젝트를 향하도록 회전합니다.
Look At: 제약된 게임 오브젝트를 연결된 게임 오브젝트 방향으로 회전합니다(간소화된 Aim 제약).
Parent: 제약된 게임 오브젝트를 연결된 게임 오브젝트와 함께 이동 및 회전합니다.
Position: 제약된 게임 오브젝트를 연결된 게임 오브젝트처럼 이동합니다.
Rotation: 제약된 게임 오브젝트를 연결된 게임 오브젝트처럼 회전합니다.
Scale: 제약된 게임 오브젝트를 연결된 게임 오브젝트처럼 확대/축소합니다.
Constraint 컴포넌트의 Sources 리스트를 사용하여 연결할 게임 오브젝트를 지정합니다.
예를 들어 2D 슈팅 게임에서 조준점이 플레이어의 우주선을 따라가게 하려면 조준점에 Position Constraint 컴포넌트를 추가합니다. 조준점을 우주선에 연결하려면 Position Constraint 컴포넌트로 이동하여 우주선 게임 오브젝트를 Sources 리스트에 추가합니다. 플레이어가 우주선을 움직이면 조준점이 따라갑니다.
제약은 여러 소스 게임 오브젝트에 연결될 수 있습니다. 이 경우 제약은 소스 게임 오브젝트의 평균 위치, 회전 또는 확대/축소를 사용합니다. 예를 들어 광원이 게임 오브젝트 그룹을 가리키도록 하려면 광원 게임 오브젝트에 Aim Constraint 컴포넌트를 추가합니다. 그런 다음 Sources 리스트에 조명을 비출 게임 오브젝트를 추가합니다. Aim Constraint 은 조명이 광원의 평균 위치를 향하도록 합니다.
Unity는 소스 게임 오브젝트가 Sources 리스트에 표시되는 순서대로 평가합니다. 이 순서는 Position 및 Scale Constraint 에 영향을 미치지 않습니다. 그러나 이 순서는 Parent, Rotation, Aim Constraint 에 영향을 미칩니다. 원하는 결과를 얻으려면 항목을 드래그 앤 드롭하여 Sources 리스트의 순서를 변경합니다.
일련의 게임 오브젝트를 제한할 수 있습니다. 예를 들어, 새끼 오리들이 어미 오리를 줄서서 따라가도록 할 수 있습니다. Duckling1 게임 오브젝트에 Position Constraint 컴포넌트를 추가합니다. Sources 리스트에서 MotherDuck_에 연결합니다. 그런 다음 Duckling1_에 연결되는 Position Constraint 을 Duckling2_에 추가합니다. MotherDuck_ 게임 오브젝트가 씬에서 움직이면 Duckling1_은 MotherDuck_을 따르고 Duckling2_는 Duckling1_을 따릅니다.
제약의 주기를 생성하지 않도록 주의하십시오. 게임플레이 중에 업데이트가 불규칙해집니다.
제약의 일반적인 프로퍼티를 변경하려면 인스펙터 창을 사용합니다.
제약의 영향을 다양화하려면 Weight 를 사용합니다. 가중치가 1이면 제약이 소스 게임 오브젝트와 동일한 속도로 게임 오브젝트를 업데이트합니다. 가중치를 0으로 설정하면 제약의 효과가 완전히 제거됩니다. 각 소스 게임 오브젝트에는 개별 가중치도 있습니다.
Constraint Settings 에서 At Rest 프로퍼티를 사용하여 Weight 가 0인 경우나 Freeze Axes 에서 해당 프로퍼티가 선택되지 않은 경우에 사용할 X, Y, Z 값을 지정합니다.
Constraint Settings 의 Offset 프로퍼티를 사용하여 게임 오브젝트를 제약하는 경우에 사용할 X, Y, Z 값을 지정합니다.
Freeze Axes 설정을 사용하여 제약에 따라 실제로 수정될 수 있는 축을 토글합니다.
제약을 사용하여 수행하는 작업에는 활성화와 잠금이라는 두 가지 요소가 있습니다.
제약을 활성화하여 제약된 게임 오브젝트의 위치, 회전 또는 확대/축소를 평가할 수 있습니다. Unity는 비활성 제약을 평가하지 않습니다.
제약을 잠그고 게임 오브젝트를 이동, 회전 또는 확대/축소할 수 있습니다. 잠긴 제약은 게임 오브젝트의 트랜스폼의 관련 부분을 제어합니다. 제약이 잠긴 상태로 게임 오브젝트를 수동으로 이동, 회전 또는 확대/축소할 수 없습니다. Constraint Settings 를 편집할 수도 없습니다.
게임 오브젝트의 위치, 회전 또는 확대/축소를 수동으로 편집하려면 제약을 잠금 해제합니다. 잠겨 있지 않은 제약이 활성화된 경우 제약된 게임 오브젝트 또는 소스 게임 오브젝트를 이동, 회전 또는 확대/축소할 때 Constraint Settings 가 자동으로 업데이트됩니다.
Constraint 컴포넌트를 게임 오브젝트에 추가하면 제약이 비활성화되고 기본적으로 잠금 해제됩니다. 이를 통해 제약을 활성화하고 잠그기 전에 제약된 게임 오브젝트와 소스 게임 오브젝트의 위치, 회전, 확대/축소를 조정할 수 있습니다.
편의를 위해 Activate 및 Zero 버튼을 누르면 Constraint Settings 가 업데이트됩니다.
Activate: 소스 게임 오브젝트의 현재 오프셋을 저장한 후 제약된 게임 오브젝트를 활성화하고 잠급니다.
Zero: 위치, 회전 또는 확대/축소를 소스 게임 오브젝트와 일치하게 재설정한 후 제약된 게임 오브젝트를 활성화하고 잠급니다.
애니메이션 클립을 사용하여 제약된 게임 오브젝트가 연결된 소스 게임 오브젝트를 수정합니다. 애니메이션이 소스 게임 오브젝트를 수정할 때 제약은 제약된 게임 오브젝트를 수정합니다.
Constraint 컴포넌트에서 프로퍼티를 애니메이션화할 수도 있습니다. 예를 들어 부모 제약을 사용하여 캐릭터의 검을 손에서 등으로 이동합니다. 먼저 검 게임 오브젝트에 부모 제약을 추가합니다. Sources 리스트에서 제약을 캐릭터의 손과 캐릭터의 척추에 연결합니다. 검을 애니메이션화하려면 각 소스의 가중치에 대한 키프레임을 추가합니다. 검이 등에서 손으로 이동하도록 애니메이션화하려면 키프레임을 추가하여 손의 가중치를 0에서 1로 변경하고 척수의 가중치를 1에서 0으로 변경합니다.
동일한 게임 오브젝트에 두 종류 이상의 Constraint 컴포넌트를 추가할 수 있습니다. 게임 오브젝트를 업데이트할 때 Unity는 Constraint 컴포넌트가 인스펙터 창에 표시되면 처음부터 마지막까지 평가합니다. 게임 오브젝트에는 동일한 종류의 Constraint 컴포넌트 하나만 포함할 수 있습니다. 예를 들어 두 개 이상의 Position Constraint을 추가할 수 없습니다.
Autodesk® Maya® 및 MotionBuilder®에서 FBX 파일을 Unity 에디터로 임포트할 때 제약을 포함할 수 있습니다. Import Settings 창의 Animation 탭을 클릭하고 Import Constraints 를 선택합니다.
Unity는 FBX 파일의 모든 제약마다 자동으로 해당하는 Constraint 컴포넌트를 추가하고 올바른 게임 오브젝트에 연결합니다.
Constraint 컴포넌트를 추가하는 방법:
제약을 적용할 게임 오브젝트를 선택합니다.
인스펙터 창에서 Add Component 를 클릭하여 추가할 제약 유형을 검색한 후 클릭하여 추가합니다.
소스 게임 오브젝트를 새 제약에 추가하고 계층 구조에서 (또는 씬 뷰에서) Sources 리스트로 드래그합니다.
제약된 게임 오브젝트와 소스 게임 오브젝트를 이동, 회전 또는 확대/축소합니다.
제약을 활성화하려면 Activate 또는 Zero 를 클릭하거나 Is Active 및 Lock 을 선택합니다.
Constraint 컴포넌트 편집 방법:
에디터에서 제약이 적용된 게임 오브젝트를 선택합니다.
At Rest 또는 Offset 필드를 조정하려면 인스펙터 창에서 Constraint Settings 를 확장하고 Lock 을 선택 해제한 후 값을 편집합니다.
제약을 통해 업데이트되는 축을 지정하려면 Constraint Settings 를 확장한 후 Freeze Axes 의 프로퍼티를 선택합니다.
소스 게임 오브젝트를 제약에 추가하려면 다음을 수행합니다.
소스 리스트에 빈 칸이 없으면 리스트 하단에서 + 버튼을 클릭합니다.
제약 소스로 사용할 게임 오브젝트를 씬에서 Sources 리스트로 드래그합니다.
소스 게임 오브젝트를 제거하려면 Sources 리스트에서 해당 오브젝트를 선택한 후 리스트 하단에서 빼기 기호(-)를 클릭합니다.
Sources 리스트의 소스 게임 오브젝트 순서를 변경하려면 이동할 각 게임 오브젝트 왼쪽의 더블 바 아이콘을 클릭하여 위 또는 아래로 드래그합니다.
참고: Sources 리스트에서 순서는 위치, 회전 및 확대/축소 제약에 영향을 미치지 않습니다. 그러나 순서는 Parent 및 Aim Constraint이 게임 오브젝트를 이동하거나 회전하는 방식에 영향을 미칩니다.
Is Active 와 Lock 을 선택합니다.
2018–04–11
2018.1에 제약이 추가됨. NewIn20181