IKControl Joint Constraint [Beta]

hi david, i want to know how to rotate a part/union with cframe in a script i don’t know how to

you can still use pole with constraints, i used it in my last post in this thread to make knee always point forward instead of pointing to the sides after some time

Hi! Is this live in game yet when we publish it, or studio only?

Still Studio only currently, but we are planning to make it available in published experiences very soon.

I see.
Does Roblox plan to add joint constraint for bones any time soon? Seems like an extremely hard thing to implement.

Will we see a solution for the aforementioned problems with not being able to disable IK being affected by constraints before release? We just released a game where this would break systems critical to gameplay - Zombie Outbreak Tycoon 🧟‍♂️ - Roblox - player’s weapons would suddenly start pointing in the wrong direction, making them potentially miss their targets

We’re currently working on adding support for constraints on Bones for IKControl. The plan is to have that ready when we end the beta and make this available in published experiences. But that’s just for IK, no physics simulation of Bones yet.

We’re going to release this using a three phase rollout with a global enabled/disabled option, so you’ll be able to disable constraint support in your experience. We are planning to remove this option eventually, but not until it’s been thoroughly tested in the wild and we’ve hopefully come up with a better solution for your use case. Specifically one of our longer term goals is to ship a set of constraints for R15 characters that works well both with IK and ragdoll characters so that separate constraint setups for animated and physically simulated characters aren’t needed.

3 Likes

How did you keep the foot position stuck to the ground?

1 Like

updating target position based on some conditions and just raycasting

1 Like

Thanks for taking the time to respond, but if you show the code I will understand this better, and it would make my day.

1 Like

i deleted it like a month ago so sadly i cannot give it, but it is as simply as i explained above (~10 lines of code for each leg), like
if ik_target_left_leg.position:distance(desired_pos) > X then unlerped_left_leg_pos = desired_pos end
then just some basic math for animating the step, i encourage you to look up on youtube about procedural walking animations, there are some nice videos there

edit: if u really want this to the next level i also encourage you to make ur own movement system so you have more control over the player model (ex if user pressed A make an entire step left so it wont make ur animations look bad)

Are the IKControls still supposed to be effecting the Motors of the Rig even when the weight is 0? I find myself having to turn the entire IK off to stop it from effecting the motors in a significant way even when the weight is 0, which causes a bit of a stutter when animations are mid playing.

1 Like

Hey, I noticed you were actually able to make them bed normally, this constraint feature is still kinda weird to me. Can you tell me how you were able to set up the constraints to make the legs rotate like in your video?

you can take as example my leg R15 compatible ones, i made them for hands too some time ago but i didnt do it in code but “live” just by moving an ik target and then adding and adjusting the constraints

local constraints = {
	left_leg_knee = Instance.new("HingeConstraint"),
	left_leg_hip = Instance.new("BallSocketConstraint"),
	left_leg_ankle = Instance.new("BallSocketConstraint"),
	right_leg_knee = Instance.new("HingeConstraint"),
	right_leg_hip = Instance.new("BallSocketConstraint"),
	right_leg_ankle = Instance.new("BallSocketConstraint"),
}

constraints.left_leg_knee.Parent = rig.LeftUpperLeg
constraints.left_leg_hip.Parent = rig.LowerTorso
constraints.left_leg_ankle.Parent = rig.LeftLowerLeg
constraints.right_leg_knee.Parent = rig.RightUpperLeg
constraints.right_leg_hip.Parent = rig.LowerTorso
constraints.right_leg_ankle.Parent = rig.RightLowerLeg

constraints.left_leg_knee.Attachment0 = rig.LeftUpperLeg.LeftKneeRigAttachment
constraints.left_leg_knee.Attachment1 = rig.LeftLowerLeg.LeftKneeRigAttachment
constraints.left_leg_knee.LimitsEnabled = true
constraints.left_leg_knee.UpperAngle = 0
constraints.left_leg_knee.LowerAngle = -155

constraints.left_leg_hip.Attachment0 = rig.LowerTorso.LeftHipRigAttachment
constraints.left_leg_hip.Attachment1 = rig.LeftUpperLeg.LeftHipRigAttachment
constraints.left_leg_hip.LimitsEnabled = true
constraints.left_leg_hip.UpperAngle = 35
constraints.left_leg_hip.TwistLimitsEnabled = true
constraints.left_leg_hip.TwistLowerAngle = -70
constraints.left_leg_hip.TwistUpperAngle = 130

constraints.left_leg_ankle.Attachment0 = rig.LeftLowerLeg.LeftAnkleRigAttachment
constraints.left_leg_ankle.Attachment1 = rig.LeftFoot.LeftAnkleRigAttachment
constraints.left_leg_ankle.LimitsEnabled = true
constraints.left_leg_ankle.UpperAngle = 25
constraints.left_leg_ankle.TwistLimitsEnabled = true
constraints.left_leg_ankle.TwistLowerAngle = -25
constraints.left_leg_ankle.TwistUpperAngle = 25

constraints.right_leg_knee.Attachment0 = rig.RightUpperLeg.RightKneeRigAttachment
constraints.right_leg_knee.Attachment1 = rig.RightLowerLeg.RightKneeRigAttachment
constraints.right_leg_knee.LimitsEnabled = true
constraints.right_leg_knee.UpperAngle = 0
constraints.right_leg_knee.LowerAngle = -155

constraints.right_leg_hip.Attachment0 = rig.LowerTorso.RightHipRigAttachment
constraints.right_leg_hip.Attachment1 = rig.RightUpperLeg.RightHipRigAttachment
constraints.right_leg_hip.LimitsEnabled = true
constraints.right_leg_hip.UpperAngle = 35
constraints.right_leg_hip.TwistLimitsEnabled = true
constraints.right_leg_hip.TwistLowerAngle = -70
constraints.right_leg_hip.TwistUpperAngle = 130

constraints.right_leg_ankle.Attachment0 = rig.RightLowerLeg.RightAnkleRigAttachment
constraints.right_leg_ankle.Attachment1 = rig.RightFoot.RightAnkleRigAttachment
constraints.right_leg_ankle.LimitsEnabled = true
constraints.right_leg_ankle.UpperAngle = 25
constraints.right_leg_ankle.TwistLimitsEnabled = true
constraints.right_leg_ankle.TwistLowerAngle = -25
constraints.right_leg_ankle.TwistUpperAngle = 25
3 Likes

I will literally marry you, even if that’s the last thing I do

1 Like

We are pleased to announce that IKControl Joint Constraint support is now out of beta and can be used in live experiences!

We’ve added several new features in this release, including:

  • Support for Bone-based characters.
    • (Attachments can now be parented to Bones)
  • Support for UniversalConstraint.
  • Improved performance.

To prevent issues in existing experiences, this release will begin as opt-in. To enable IKControl Constraint support in your experience, set the Workspace property IKControlConstraintSupport to Enabled. As with other three-phase roll-outs, in the near future we will make Enabled the default, then eventually remove the property completely.

Please test this feature and report any issues with your experiences. Once reported, we will address them before proceeding to opt-out. Even after the workspace property is removed, you will always be able to stop a constraint from affecting IKControl by setting its Enabled property to false.

11 Likes

R.I.P Poles :cry:


I have to redo everything

1 Like

Was something changed with the solver? I am getting many bug reports of weird behavior. The IKControllers seem to be ignoring their pole properties. Here is an example submitted by one of my players:

1 Like

this is so epic i need to try it now but not now

I was really hoping this wouldn’t happen. IKControl was going to fix a long-standing problem in Nexus VR Character Model, but I can’t ship it without being able to assume this is enabled. IKControl without the constraints led to some awful results that constraints fixed.

Is there a timeline when it will be enabled for everyone by default? Weeks? Months?