[Unity] Hinge Joint 활용 방법

728x90

사슬, 대롱대롱 매달려 있는 추, 또는 상부에 연결된 로프 등을 물리적으로 자연스럽게 구현하기 위해 고민하다가 유니티에서 제공하는 Hinge Joint 컴포넌트를 발견했다. Hinge는 '경첩'을 의미하는 단어로 문을 열고 닫을 때 벽과 연결되어 축을 기준으로 회전할 수 있게 하는 고정핀 같은걸 의미한다.

 

힌지 조인트(Hinge Joint)는 두개의 Rigidbody를 묶어서 힌지에 연결된 것 같이 움직이도록 제약을 두는 기능이다. 다시 말해 A 오브젝트가 B 오브젝트에 종속적으로 연결되어 B 오브젝트가 물리적으로 영향을 받을 때 A와 B가 연결된 축(Axis)을 기준으로 A 오브젝트가 영향을 받게 된다. 

Hinge Joint 컴포넌트를 추가하면 다음과 같은 프로퍼티를 확인할 수 있다.

 

가장 핵심적인 기능만 살펴보자면

Connected Body에는 종속적으로 연결되고 싶은 부모? 오브젝트를 연결하면 된다. B 오브젝트에 힌지 조인트 컴포넌트가 추가 되었다면 B 오브젝트가 연결되고 싶은 A 오브젝트를 Connected Body에 연결시켜주면 되겠다.

프로퍼티 중에 Anchor와 Connected Anchor 프로퍼티가 있다. 이는 고정이 되는 앵커 포인트들의 좌표를 지정해주는 기능으로 Anchor는 연결하고자 하는 오브젝트, Connected Anchor는 연결되어지는 부모 오브젝트의 고정 점이라고 보면 되겠다. Connected Body를 연결하면 기본적으로 Anchor가 오브젝트의 가장 위로 설정이 되지만 세부적으로 조정해 상황에 맞는 물리 효과를 구현해낼 수 있다. 가령 Anchor와 Connected Anchor의 distance가 멀다면 좀더 동적이지만 살짝 부자연스러운 움직임을, 좁다면 다소 정적이지만 디테일한 움직임을 표현해 낼 수 있을 것이다.

 

그 밖에 Axis(축)의 x,y,z 좌표를 조정해 흔들리는 rigidbody의 축 방향을 설정할 수 있고, Endit Angular Limits을 사용해 흔들리는 범위를 제한해 줄 수도 있다.

 

 

이를 응용하여 다음과 같은 사슬 및 진자 추를 만들어보았다. 기준이 되는 cube는 rigidbody가 추가되어 있지만 중력 적용을 받으면 안되기 때문에 use gravity를 체크 해제해주고 isKinematic을 체크해준다. 나머지 오브젝트들은 hinge joint로 줄줄이 연결하고 rigid body의 중력을 체크해주어(is Kinematic 체크 해제) 물리 효과를 적용받으면 된다. 

맨 하단의 Sphere를 움직이면 연쇄적으로 물리 현상이 적용되는 것을 살펴 볼 수 있다.

 

 

참고

https://docs.unity3d.com/kr/530/Manual/class-HingeJoint.html

728x90