I’m currently implementing an inventory system for my game using DataAssets - it does make it simple.
I’m using a generic Actor for pickup, that has a DataAsset pointer which I can set to whatever I’m wanting (random etc).
The pickups are created when I’m within a certain distance from them (There is a base “Pickup Manager” that has a small struct of Transform within the world, Type etc for each pickup in the world) - the actors are Pooled so there’s no actual Spawning going on - it’s fast and so far, easy to work with.
The downside is that each time the player moves in the world, it needs to check the pickup list for location proximity, but from what I can tell so far, that’s magnitudes more efficient that having the pickups all residing in the world (even partitioned).