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;
}
}