스파르타 내일배움캠프/Today I Learned

Today I Learned - Day 38 [조인트]

불면증 도사 2024. 11. 6. 22:27

일전에 '움직이는 플랫폼을 따라서 움직이는 탑승자'에 대해서 다뤄본 적이 있었다.

결과적으로는 'Raycast를 이용해서 따라서 움직인다'는 결론을 내렸었지만, 실제로 쓸 수 있는 수단은 매우 다양하다.

 

자, 이제 그렇가면 물체가 어딘가에 '매달려 있어야 한다'라고 한다면 어떻게 해야할까.

[물론, 물리 법칙은 정상적으로 작동 되어야 한다는 전제조건도 만족해야 한다.]

스크립트를 이용해서 구현하는 방법도 있겠지만, 유니티 상에서 기본적으로 제공하는 '조인트'라는 기능이 존재한다.

 

그럼 조인트에 대해서 간략하게 알아보자.


조인트는 지정한 물체들 간의 연결적인 고정관계를 형성할 때 사용하는 컴포넌트다.

당연하지만, 유니티 상의 물리 법칙을 적용하기 때문에 Rigidbody가 필수로 적용되어 있어야 한다.

 

본문에서는 어떤 형식이 있는 지만 알아보고, 각 Joint의 상세 사항에 대해서는 UnityDocumentation을 참고하자.

아무래도 컴포넌트이기도 하고, 사용법도 간단한 편이라서 여기서 설명하기 보다는 관련 페이지를 확인하는 것이 더욱 편할 것이다.

[URL:https://docs.unity3d.com/kr/2020.3/Manual/Joints.html]

 

조인트의 종류에는 5개가 존재한다.

  • 힌지 조인트(Hinge Joint): 한 '점'을 기준으로 고정.
  • 픽스드 조인트(Fixed Joint): 물체 '전체'를 기준으로 고정
  • 스프링 조인트(Spring Joint): 한 '점'을 기준으로 반 고정(고정이 유동적)
  • 캐릭터 조인트(Character Joint): 래그돌(전신의 고정이 풀려 무너지는 형상) 구현을 위한 조인트
  • 컨피규러블 조인트(Configurable Joint): 사용자가 편집 가능한 조인트

 

컴포넌트다 보니, 스크립트로도 AddComponent를 이용해서 추가도 가능하다.

이를 이용해서 줄타기 게임을 만든다거나, 괴혼 같은 붙이기 게임을 만들수 있다.

단, '고정될 대상을 지정해야 한다'라는 점은 주의하자.

[추가로 Fixed Joint를 제외하면 고정될 지점도 지정해야 한다.]

 

그리고, '고정'이기 때문에 고정된 물체들 끼리는 서로 이동에 영향을 받는다는 점과 Collider는 그대로 유지된다는 점도 주의하자. 잘못 작성하면 둘이 서로 계속 충돌해서 공중으로 치솟는 현상이 발생할 수도 있다.