void CreateRagdoll::CreateRagdollBone(const String& boneName, ShapeType type, const Vector3& size, const Vector3& position, const Quaternion& rotation) { // Find the correct child scene node recursively Node* boneNode = node_->GetChild(boneName, true); if (!boneNode) { URHO3D_LOGWARNING("Could not find bone " + boneName + " for creating ragdoll physics components"); return; } RigidBody* body = boneNode->CreateComponent<RigidBody>(); // Set mass to make movable body->SetMass(1.0f); // Set damping parameters to smooth out the motion body->SetLinearDamping(0.05f); body->SetAngularDamping(0.85f); // Set rest thresholds to ensure the ragdoll rigid bodies come to rest to not consume CPU endlessly body->SetLinearRestThreshold(1.5f); body->SetAngularRestThreshold(2.5f); CollisionShape* shape = boneNode->CreateComponent<CollisionShape>(); // We use either a box or a capsule shape for all of the bones if (type == SHAPE_BOX) shape->SetBox(size, position, rotation); else shape->SetCapsule(size.x_, size.y_, position, rotation); }