Here’s how you can do it with simple widgets:
This creates crops to interact with and binds a dispatcher to an Event in the Level which, in turn, notifies the Player that a Crop was clicked, sending just the crop’s image (you can send more data, of course)
When the character receives notification, they create a widget at their own position (you can use crop’s position instead), pass on the image of the picked up crop, and add it to the viewport.
The widget is just a single image and an exposed 2d Texture variable, no canvas or anything else. The widget does have an animation that kicks in as soon as it is created. The animation shifts the image in Y (the direction is up to you) and animates the opacity to 0, all of it over 1s.
As soon as the animation is over, the widget removes itself.
The above should be using OnAnimationFinished but it also works fine with Started in this case. Widgets are weird.
It looks like this on my end:
This setup does not include picking up several items at a time but that’s quite straightforward to handle. Let me know if it gives you grief, though.
You can make the player responsible for picking things up rather than the Crops responding:
In this case, player character has an overlapping collision sphere at their feet, it filters for actors, adds them to an array and removes 1 every .2s, creating widgets to visualise the removal. The rest stays the same.
Hope it helps. Good luck with the rest.