EnemySpawner component/script (that handles enemy generation and waves spawn) has basic pooling functionality. I.e. enemies generated on start, not every time they needed, that allow to increase performance. It will works for any enemies objects (doesn't matter 2D or 3D), i believe you can easily adapt it class EnemiesList(Class to pre-generate and process the array of objects) for any other objects. On the other hand - you may want to use another more powerful pooling asset from store.