Hi,
I see. Then the following might help you more.
you can split features by fsm. for example, have on fsm responsible for managing the drag ( mouse click -> record position every frame until mouse is up). Use this fsm to also trigger two global events: "MOUSE DRAG STARTED" and "MOUSE DRAG STOPPED" and pass in the event or record in a variable the gameObject targeted for the drag ( the gameObject under mouse).
have another fsm reading the mouse position and casting a ray on a plane to get a 3d position.
have a third fsm reacting to "MOUSE DRAG STARTED" and "MOUSE DRAG STOPPED" that read gameObject to move and the 3d position from the second fsm and move the actual model you want to follow that position.
That's one possible way to cut it down. As you get more acquainted, you can see otherways and shuffle things around based on your need. You might for example have some more complex need where the dragged gameObject would only move or snap to particular elements or state, if you have several fsm invovled, it will be easier for you to add complexity. One fsm is to avoid for anything complex ( or where several "features" are defined).
Bye,
Jean