CharacterJoint

  • Unity의 ‘CharacterJoint’는 래그돌 물리학과 생물학적 생물체에서 발견되는 것과 유사한 복잡한 관절 동작을 시뮬레이션하는 데 자주 사용되는 특수한 유형의 관절입니다.
  • 이는 본질적으로 ConfigurableJoint의 확장 버전이며 일반적인 인간형 관절에 대해 더 쉽게 설정할 수 있도록 설계되었습니다.
  • 속성에 대한 자세한 설명은 다음과 같습니다.

Connected Body

  • 조인트가 연결될 RigidBody 입니다.
  • 만약 아무것도 연결하지 않는다면 Worold Position에 연결이 됩니다.

    Anchor ( Vector3 )

  • 관절이 고정되는 개체의 Local 지점 입니다
  • 연결된 관절과의 회전을 담당합니다.

    Axis ( Vector3 )

  • 관절이 이동하거나 회전하는 기본 축 입니다.

    Auto Configure Connect ( bool )

  • true 상태라면 관절 연결시 자동으로 관절의 위치를 잡아줍니다.

    Connected Anchor ( Vector3 )

  • 연결된 관절의 위치를 앵커 위치를 표시합니다.

    Twist Limit Spring (비틀림 제한 스프링)

  • Spring (스프링): 조인트 내에서 비틀림 제한을 유지하기 위해 적용되는 스프링 힘입니다.
  • Damper (댐퍼): 조인트의 진동을 늦추는 데 사용되는 감쇠력입니다.

    Low Twist Limit (낮은 비틀림 제한)

  • Limit (제한): 조인트의 주축을 따라 비틀림의 하한 각도 제한입니다.
  • Bounciness (탄력): 낮은 비틀림 제한에 도달했을 때 조인트의 탄력입니다. 높은 값은 제한에 닿았을 때 조인트가 더 많이 튕기게 합니다.
  • Contact Distance (접촉 거리): 물리 엔진이 제한을 적용하기 시작하는 거리입니다. 작은 값은 제한을 더 강하게 만듭니다.

    High Twist Limit (높은 비틀림 제한)

  • Limit (제한): 조인트의 주축을 따라 비틀림의 상한 각도 제한입니다.
  • Bounciness (탄력): 높은 비틀림 제한에 도달했을 때의 탄력입니다.
  • Contact Distance (접촉 거리): 높은 비틀림 제한을 적용하는 거리입니다.

    Swing Limit Spring (스윙 제한 스프링)

  • Spring (스프링): 스윙 제한 내에서 조인트를 유지하기 위해 적용되는 스프링 힘입니다.
  • Damper (댐퍼): 제한 내에서 스윙 동작을 늦추는 데 사용되는 감쇠력입니다.

    Swing 1 Limit (스윙 1 제한)

  • Limit (제한): 첫 번째 스윙 축(주로 주축에 수직인 축)에 대한 각도 제한입니다.
  • Bounciness (탄력): 스윙 1 제한에 도달했을 때의 탄력입니다.
  • Contact Distance (접촉 거리): 스윙 1 제한을 적용하는 거리입니다.

    Swing 2 Limit (스윙 2 제한)

  • Limit (제한): 두 번째 스윙 축에 대한 각도 제한입니다.
  • Bounciness (탄력): 스윙 2 제한에 도달했을 때의 탄력입니다.
  • Contact Distance (접촉 거리): 스윙 2 제한을 적용하는 거리입니다.

    추가 속성

  • Enable Projection (프로젝션 활성화): 조인트 제약 조건을 더 강하게 적용하여 안정성을 유지하는지 여부를 결정합니다.
  • Projection Distance (프로젝션 거리): 프로젝션을 적용하여 위치를 보정할 때 사용되는 연결된 본문 간의 최대 거리입니다.
  • Projection Angle (프로젝션 각도): 프로젝션을 적용하여 회전을 보정할 때 사용되는 최대 각도입니다.
  • Break Force (파괴 힘): 조인트가 파괴되는 힘의 임계값입니다.
  • Break Torque (파괴 토크): 조인트가 파괴되는 토크의 임계값입니다.
  • Enable Collision (충돌 활성화): 활성화되면 연결된 본문의 콜라이더가 서로 충돌합니다.
  • Enable Preprocessing (전처리 활성화): 조인트를 안정화하기 위해 최적화합니다. 비활성화하면 특정 문제를 해결할 수 있지만 안정성이 감소할 수 있습니다.
  • Mass Scale (질량 척도): 조인트의 RigidBody 질량 계산에 미치는 영향을 조절합니다.
  • Connected Mass Scale (연결된 질량 척도): 연결된 RigidBody의 질량 계산에 미치는 영향을 조절합니다.

Code 접근

  • 코드로 Inspector 속성에 접근
private void SetupCharacterJoint(CharacterJoint[] characterJoints)  
{  
    foreach (var joint in characterJoints)  
    {  
        joint.anchor = new Vector3(0, 0, 0);  
        joint.axis = new Vector3(0, 0, -1);  
        joint.swingAxis = new Vector3(0, 1, 0);  
  
        SoftJointLimit softJointLimit = new SoftJointLimit  
        {  
            limit = 90,   
bounciness = 0,  
            contactDistance = 0  
        };  
        joint.swing1Limit = softJointLimit;  
        joint.swing2Limit = softJointLimit;  
        joint.lowTwistLimit = softJointLimit;  
        joint.highTwistLimit = softJointLimit;  
  
        SoftJointLimitSpring jointSpring = new SoftJointLimitSpring()  
        {  
            spring = 100000,  
            damper = 100000,  
        };  
        joint.twistLimitSpring = jointSpring;  
        joint.swingLimitSpring = jointSpring;  
  
        joint.enableProjection = true;  
        joint.projectionDistance = 0;  
        joint.projectionAngle = 20;  
        joint.breakForce = Mathf.Infinity;  
        joint.breakTorque = Mathf.Infinity;  
  
        joint.enableCollision = false;  
        joint.enablePreprocessing = false;  
  
        joint.massScale = 1;  
        joint.connectedMassScale = 1;  
    }
}