IKControl Joint Constraint [Beta]

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?

This looks really interesting to try out!!

1 Like

I give up until someone releases a tutorial, I have no clue how this works. :happy1:

1 Like

u give up on constraints or on what? i posted leg constraints above in this thread u can mimic that for hands, last time i tried poles were working too with constraints

1 Like

You half way saved me, I took a little bit of your earlier code and got it to function similarly to the way it used to. It still bugs out from time to time however:

I also don’t know how to keep the BallSocketConstraints twist limit in the middle, It keeps bouncing around and looks funky. I really liked the Pole property from before. Thanks though!

There’s still no solution for this game-breaking issue:

If this new feature gets enabled by default without a fix, players in our game will be stuck getting spawn-killed by zombies because they can’t shoot, and we will have to make an emergency patch, disabling another feature in the process. I wouldn’t count on this being enabled by default soon.

1 Like

Is there something more to enable this than to set the Workspace property IKControlConstraintSupport to Enabled? I tried following the tutorial and my hinge constraint is splitting apart as I move the arm.

Did you find any (elegant) solution to this? I’m in the same situation. I want to be able to hold a potion bottle with the limbs positioned automatically but I get the weird noodle effect you described, so I need to make an animation that overrides the animation’s limbs :/

are poles no longer working for you? last timed i tried they were working perfectly

1 Like

This is what happens when I use Poles, This didn’t happen at all before the update.

1 Like


poles seem to work perfectly for me

1 Like