조인트(Joint)

유니티의 조인트(Joint)는
물리적으로 두 개의 객체를 연결하여
제한된 방식으로 서로 상호작용하게 만드는 컴포넌트이다.
즉, 조인트는 오브젝트들이
서로 물리적으로 연결되어 움직이도록 제어할 수 있는 기능이다.
조인트는 서로 연결되는 두개의 오브젝트가 있어야 하며
두 오브젝트에 모두 Rigidbody가 있어야 한다.
조인트의 해제 조건은
조인트 컴포넌트의 프로퍼티인
'Break Force', 'Break Torque' 설정값에 따라
힘이 가해졌을 때 조인트가 해제된다.
📌 3D 조인트 종류
| Joint 종류 | 설명 | 사용 예시 |
| Fixed Joint (고정조인트) | 두 오브젝트를 고정. 움직임/회전 없음. | 무너지는 다리, 고정된 기계 부품 |
| Hinge Joint (중심점조인트) | 한 축으로 회전 가능. 도어, 바퀴 구현 가능. | 회전문, 차량 바퀴 |
| Spring Joint (스프링조인트) | 스프링처럼 탄성 있게 연결. 흔들림 표현 가능. | 매달린 오브젝트, 줄 |
| Configurable Joint | 모든 조인트 기능을 자유롭게 설정. 복잡하지만 유연함. | 로봇 관절, 물리 기반 캐릭터 |
| Character Joint | 인체/동물 관절 전용. 관절 회전 제어가 쉬움. | 팔, 다리, 관절 기반 캐릭터 |
| Articulation Body (Rigidbody 없이 연결) |
로봇 팔 등에 쓰이는 정확하고 안정적인 연결 방식 | 로봇, 기계팔, 정밀 시뮬레이션 |
오늘은 Fixed Joint에 대해서 알아보려고 한다.
Fixed Joint (고정 조인트)
고정 조인트(Fixed Joint)는 오브젝트의 이동을 제한하여 다른 오브젝트에 의존하도록 하는 제약으로 조인트한 오브젝트가 이동하면 자식 개체처럼 의존적으로 따라 이동한다. 따라서 부셔져서 쉽게 떨어질 수 있는 오브젝트를 제어하거나, 부모-자식 관계가 아닌 두 오브젝트의 이동을 연결하고 싶은 경우에 유용하게 사용할 수 있다. 보통 따라갈 오브젝트에 조인트 컴포넌트를 추가해서 의존할 오브젝트의 리지드바디를 Connected Body에 할당한다.
연결할 두 오브젝트는 모두 Rigidbody가 있어야 한다는걸 유의하자!

📌 프로퍼티
- Connected Body : 조인트가 의존하는 리지드바디 (null일 경우 월드에 연결되어 계속 멈춤)
- Break Force : 조인트를 해제하기 위해 필요한 힘
- Break Torque : 조인트를 해제하기 위해 필요한 회전력
- Enable Collision : 옵션이 체크되어 있는 경우 조인트로 연결된 바디간 충돌이 활성화 된다.
기본값은 false이며, 조인트되어있는 오브젝트끼리는 충돌할 가능성이 크기때문에 충돌을 인식하지 않는다. - Enable Preprocessing : 옵션을 비활성화하면 처리 불가능한 설정을 그대로 계산한다.
기본값은 True이며, 상반된 설정(너무 좁은 제한값이나 강한 회전력 등)을 유니티가 조정해서 폭발이나 떨림 현상을 줄여준다.
💡 Fixed Joint를 이용한 점착 기능 구현하기
점착 수류탄은 월드를 자유롭게 이동하다가
어딘가에 닿으면 그 자리에 멈춘다.
고정 조인트를 이용해서 '점착'의 기능을 구현할 수 있다.
아래 사진을 보자.

두 오브젝트(노란색 큐브, 하얀색 벽)는
모두 콜라이더와 리지드바디가 붙어있으며
노란색 큐브는 중력의 영향을 받아
런타임에 아래로 떨어진다.
여기서 벽과 닿았을 경우,
그 위치에서 큐브를 멈추게 하려면
벽과의 Collision이 일어났을 때
고정 조인트를 추가하고
충돌한 collision의 rigidbody를 연결하면 된다.
⬇️ 코드 ⬇️
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Grenade : MonoBehaviour
{
private bool isStuck = false;
private void OnCollisionEnter(Collision collision)
{
if (isStuck) return;
Rigidbody targetRb = collision.rigidbody;
if (targetRb != null)
{
// 고정 조인트 생성
FixedJoint joint = gameObject.AddComponent<FixedJoint>();
joint.connectedBody = targetRb;
isStuck = true;
Debug.Log("점착!");
}
}
}

실행하면 다음과 같이
잘 점착된 것을 볼 수 있다.
하지만 커넥트 바디에 할당하는 리지드바디는
하나만 가능하다.
때문에 여러 오브젝트를 조인트 하고싶을 경우
조인트를 여러개 사용하는 방법도 있지만
오브젝트가 너무 많을 경우 이는 옳은 방법이 아닐 것이다.
때문에 점착수류탄과 같은 기능은
중력 false, speed를 0과같은 제어 방식으로 구현하고
조인트는 다른 영역에서 활용하는게 좋아보인다!
조인트 - Unity 매뉴얼
Joint 컴포넌트는 리지드바디를 다른 리지드바디 또는 공간의 고정된 지점에 연결합니다. 조인트는 리지드바디를 움직이는 힘을 가하고, 조인트 한계는 그러한 움직임을 제한합니다. 조인트는
docs.unity3d.com
wooj22 - Overview
🎮 Game Programmer. wooj22 has 22 repositories available. Follow their code on GitHub.
github.com
양우정
www.youtube.com
'Game Engine > Unity' 카테고리의 다른 글
| [Unity] 전역 조명(GI)과 라이트 매핑, 라이프 프로브 개념 (0) | 2025.04.08 |
|---|---|
| [Unity] 물리 머티리얼 (Physics Material) (0) | 2025.04.08 |
| [Unity] PlayerPrefs 클래스를 활용한 데이터 저장 (0) | 2025.04.08 |
| [Unity] 터널링(Tunneling)과 Collision Detection (0) | 2025.04.08 |
| [Unity] 유용하게 활용되는 유니티 어트리뷰트(Attribute) 모음 (0) | 2025.04.08 |