Timeline and animations are the way to go. If your trigger condition is met (pressed interact key, walked into a trigger box, whatever), trigger an event in your blueprints that starts the Timeline. The output float value of the timeline determines how far in the animation it needs to be. You would play the timeline in reverse to close the object.
By the way, this type of behavior is what blueprints are really made for outside of prototyping. The trigger is fine in C++, but the events caused by the trigger in regards to cosmetics should be done in blueprint.