IK Controls are now out of beta!

It was working fine until the last update, but now it’s broken, what I’ve done doesn’t work…
I just updated :frowning:

This is how it worked before the update:

No problem if smoothtime is turned off

1 Like

Will there be any built in properties into this object that could be used to easily clamp the rotation/movement of the character parts?

I seem to be having a similar issue. IKControllers are completely broken outta nowhere?

Used to work fine before, made no changes from my end.

Also yes, turning smoothtime to 0 seems to fix this

3 Likes

Seems like recently the reset pose stuff we’ve been using recently got an “update” that makes it so that it will reset the transform after the IK has rendered, causing jittery motion.

I’m going to reconfigure my version to Lerp the script to CFrame.identity. Here’s an updated version:

local alpha = 0.05 --Increase if the motors are "bending slowly". Decrease if they're "lazy".

local cache = {}
local identity = CFrame.identity
local function resetpose(character)
    for _, obj in cache do
        obj.Transform = obj.Transform:Lerp(CFrame.identity, alpha)
    end
end

local function Update()
    resetpose(script.Parent)
end

--Wait half a second for character to fully load.
task.wait(0.5)

--Cache:
for _, Motor in script.Parent:GetDescendants() do
    if Motor.ClassName == 'Motor6D' then
        table.insert(cache, Motor)
    end
end

game:GetService("RunService").RenderStepped:Connect(Update)
--Change RenderStepped to Heartbeat or Stepped if you have issues.

Written on DevForum. Expect incorrectly formatted code, runtime errors, and incorrect configuration values.

Changes:

  • Added a cache of the motors for performance reasons.
  • Changed Stepped to RenderStepped (though I’m not sure if this will cause problems)
  • Lerp the transform to the identity CFrame.
  • Changed CFrame.new() to CFrame.identity, because it’s faster.

EDIT:
This is clearly a bug.

Nope, this doesn’t work after testing. The only partial solution is to set SmoothTime to 0. Also, if an animation is playing over top of the control, the animation will have priority OVER the IKControl’s target. I guess that’s why I didn’t notice it at first, because I don’t mainly use animations in my game.

The animation I’m using has a Core priority. Almost every animation in my game has a Core priority, because other priorities tended to break IKControls. Now, they do that regardless of the priority and they reject the previous behavior.

5 Likes

Have you guys exposed the option yet? I really need it as I am working on a lot of models with multiple joints, and they will always turn into a candy wrapper and its super annoying. Thanks!

1 Like

I’m having an issue where the IK Controller just stops working sometimes. It’s very inconsistent and doesn’t appear to be based on making any sort of changes. It just works for a few test runs, then it stops when trying again later for literally no reason…

Also when it works, using the UpperArm and Hand often give unrealistic results for how the arm should bend. LowerArm and Hand works much better, but I haven’t been able to get it to work for a while now.

Edit:
I finally got it to work again by removing all of the properties and resetting them (this really should not be needed).

Here are the problems I’m having.

Disclaimer

Both gifs have a lower framerate, but it still shows the issue. SmoothTime is set to 0 for both as well.

First is using the UpperArm and Hand:

Spear Idle - IK UpperArm

The arms are both clearly moving in an unnatural and unneeded way.

Then here’s using the LowerArm and Hand:

Spear Idle - IK LowerArm

This looks much more natural, except the hand is now desynced from its target, which obviously shouldn’t happen.

It seems that having an extra part in between will make it sync properly, but as seen in the first gif, it doesn’t look very good at all.

3 Likes

I don’ t think it’ s actually meant for R6 but you can do a bit of work to achieve that.

  1. Create 2 parts or more that resemble the UpperArm and LowerArm and weld them together with an offset
  2. Make a Target and set the IKControl property to that
  3. In a loop set the RightShoulder.C0 so one of the welds and offset it normally.

This is a pretty much hacky way to do it but I don’ t see another option here…

Im trying to use an IKControl to create a squid, but its over 3 parts in the chain. if i create 3 ikcontrol instances it collapses in on itself https://gyazo.com/1375447b6d277549f3974bfea3feddb0

Is there any way to remedy this?

1 Like

This is such a cool feature. I am trying to make a spider leg like in this video: Unity procedural animation tutorial (10 steps) - YouTube
I tried recreating it until I got into this problem:

Even if the parts stick to the (invisible) attachment, when the torso (of the not yet existing spider) moves the root part doesnt stick to it.
Also when I am doing the exact opposite thing:


when i am moving the lower part, the rest of the parts does not move with it. (i checked the distance between a second (invisible) attachment and if the distance crosses over 10 studs the lower part gets moved to the second attachment, thats how i create this spider movement. I really dont know how to fix this issue (I already tried welding the parts together with hinge constraints but this broke the whole ik movement. Any helps/tips would be appreciated ;-;

1 Like

I was really excited to try this feature out, but it feels almost unusable for skinned meshes as it currently stands. In the video below, I’ve set everything up as necessary incl. a pole and yet whenever the target moves, and especially when the IK target extends further than the joint, the bones roll erratically and end up in what is effectively a random orientation when the target returns to its original location.

Am I doing something wrong here? I’ve seen the post about integrating constraints to IKs, but in a circumstance where a pole is already in play, I’m confused why this behaviour persists or why additional work would be necessary to suppress it.

1 Like

You mean the one that isn’t loading?
I don’t see any issues. Just make sure your IK mode is set properly (LookAt).

Huh, not sure why it didn’t load - is there a specific video format I should be using? The issue I’m facing might be a bit difficult to understand without the visual aid, and is not one resolved by reconfiguring the mode.

Does this one work? If it does, please note how the limb, when attempting to stretch to the destination, twists inconsistently - I’ve put a decal on the top of the limb for visual clarity. The biggest issue I see here is that when returning from the overextension, the limb stays twisted.

2 Likes

I’m not exactly sure why this is happening. Seems like you need to constrain it with a UJoint.

Hi there,
( I messaged you since it looks like you experienced with this topic)
I have this arm here:
afa
and whenever I test it, it looks like this:
ui
I want to achieve this:
ui

(i added a pole to the foot so if the character moves the bend will look naturally, if I added the pole to the first part of the leg, I would get what I wanted, only that now the bend is on many different axes…
would be appreciated if you have any tips :slight_smile:

Seems like you need to use a joint constraint as well as a pole.

What kind of joint? I already used my Ik control and “jointed” all the parts together:
j
(the upper leg is hinged together with a part in the torso. That is how I manage to move the arm with the torso). Should I add like a Point where the Pole should go? I noticed you can only add one pole as an instance with a script and I do not really know how I would connect a joint as a pole…


(ignore the part glitching at the end lol)

2 Likes

u need hingeconstraints (maybe ball socket constraint in your case) if u want to add limits to ur bone rotations


in this video no pole was used

2 Likes

are there new IK controls for beta. nice

I’m still experiencing crashes after implementing IKControls to my project. Specifically when equipping a tool. It’s somewhat rare but in a server one player usually experiences it per play session.

Should I add the Hinge Constraint between the upper and the lower leg? I already have a motor 6d attached there, without it the ik joint wouldn‘t work.