For some reason, IKControl instances stop working when the ChainRoot and EndEffector are set to the same part (for example, a player’s LeftHand). This does not occur on the Enum.IKControlType.LookAt but occurs on every other type (Transform, Position, and Rotation).
Along with this, if the ChainRoot is set to a completely unrelated part (such as a SpawnLocation), the IKControl will start working, and then setting ChainRoot to nothing will not stop the IKControl from functioning, nor will removing the EndEffector. Removing the Target will then cause the output to be spammed with “Missing IkControl Target”. These issues make IKControl instances unpredictable and frustrating to work with.
Expected behavior
I expect that the other IK modes should work when the EndEffector and ChainRoot are set to the same part, and I also expect that IKControl instances should stop animating once the EndEffector, ChainRoot, or Target is removed instead of spamming my output window with warnings.
IKControl instances stop working when the ChainRoot and EndEffector are set to the same part […] This does not occur on the Enum.IKControlType.LookAt
This is expected behavior. IK Controls are responsible for rotating joints in the chain such that the end-effector ends up at the target. If ChainRoot==EndEffector, this means there’s a single joint in the chain and that therefore is not possible to rotate the joint to reach a given position. This is also explains why the LookAt type still works: because even with a single joint, it’s possible to rotate it to look at a given point.
Along with this, if the ChainRoot is set to a completely unrelated part (such as a SpawnLocation ), the IKControl will start working, and then setting ChainRoot to nothing will not stop the IKControl from functioning
This is a bug, we should indeed stop the IK control if either ChainRoot, EndEffector or Target are not defined. I’ll prepare a fix for that, thanks for the report!
I’m wondering why it would not be possible for the other three modes? If I set the ChainRoot to the LeftLowerArm and then the LeftHand then the other three modes work and it looks like there is zero effect on the LeftLowerArm, and it rotates only the LeftHand. Why would I need a chain of two motors if only one of them gets rotated?
As an example, I’ve recently found out about the great performance benefits of IKControl and was trying to animate a door that’s connected to a hinge with one Motor6D using the rotation of attachments inside the hinge part to find out setting the ChainRoot and EndEffector on the door doesn’t work on the Rotation type. Would I have to create some weird intermediary motor to have the two motor chain so it works on the Rotation type?