public override void ControlledAwake()
    {
        this.solver            = new IKCCD3D();
        this.solver.damping    = this.damping;
        this.solver.dampingMax = this.dampingMax;

        // We have to make sure to convert the input transforms to the
        // corresponding transforms on the shadow, or else you'll see
        // strange artifacts
        for (int i = 0; i < bones.Length; i++)
        {
            bones[i].transform = this.shadow.FindInShadow(bones[i].transform);
        }

        // If the end effector isn't given, we assume it's the last bone
        if (this.endEffector != null)
        {
            this.endEffector = this.shadow.FindInShadow(this.endEffector);
        }
        else
        {
            this.endEffector = this.bones[this.bones.Length - 1].transform;
        }
    }
    public override void ControlledAwake()
    {
        this.solver = new IKCCD3D();
        this.solver.damping = this.damping;
        this.solver.dampingMax = this.dampingMax;

        // We have to make sure to convert the input transforms to the
        // corresponding transforms on the shadow, or else you'll see
        // strange artifacts
        for (int i = 0; i < bones.Length; i++)
            bones[i].transform = this.shadow.FindInShadow(bones[i].transform);

        // If the end effector isn't given, we assume it's the last bone
        if (this.endEffector != null)
            this.endEffector = this.shadow.FindInShadow(this.endEffector);
        else
            this.endEffector = this.bones[this.bones.Length - 1].transform;
    }