public void SetAttach(Transform attached, Vector3 attachAnchorPositionLS)
    {
        this.attached = attached;
        this.attachAnchorPositionLS = attachAnchorPositionLS;
        if (attached)
        {
            attachedBody = attached.GetComponentInParent <Rigidbody>();
        }
        if (attachedBody && attachedBody.isKinematic && attachedBody.transform.parent)
        {
            var parentBody = attachedBody.transform.parent.GetComponentInParent <Rigidbody>();
            if (parentBody)
            {
                attachedBody = parentBody;
            }
        }
        Vector3 attachedPointWS = transform.TransformPoint(attachAnchorPositionLS);

        if (attachedBody)
        {
            attachedPointWS -= attachedBody.velocity * Time.fixedDeltaTime;              //Compensate the correlation in GetAttachedTranslation
        }
        if (attached)
        {
            attachedPositionLS = attached.InverseTransformPoint(attachedPointWS);
        }
        updateAttach.Invoke(this.attached);
    }
        private void _UpdateTransform()
        {
            Matrix newMatrix = Matrix.Identity;

            newMatrix.Scale(_Scale, _Scale);
            newMatrix.Translate(-_StartX, -_StartY);

            Matrix = newMatrix;

            UpdateTransform?.Invoke();
        }