I think it is possible. You probably need to use blueprint communication though using event dispatchers to tell the duplicate level that a certain event has happened and update appropriately. You can take a look at the following documentation links:
https://docs.unrealengine.com/latest/INT/Engine/Blueprints/UserGuide/BlueprintCommsUsage/#eventdispatchers
https://docs.unrealengine.com/latest/INT/Engine/Blueprints/UserGuide/EventDispatcher/
I really have no clue about that since I’ve never tried it personally but maybe someone else in the forum has some answers.
Depending on your design this should be fairly simple in my opinion. Let’s say you design it in a way so that the duplicate version of your area is 10,000 units above the original in the z-axis. That would mean your player would have exactly the same x and y position. Then to teleport them to the exact same position between maps, all you have to do is to add or subtract 10,000 units from the z value of their current position.
I believe it shouldn’t have any performance hit if you duplicate the area but it would definitely consume more memory.
Basically, there are different trade-offs depending on your implementation since there are multiple ways of achieving the effect. If you don’t duplicate your area and simply try to toggle every individual element to change or update it then it would mean you’d have to loop through every prop and material that you need to update or use event dispatchers to tell each object that they need to “update” themselves. The pro of this is you will probably use less memory, since you don’t have the additional walls and floors. The con is looping through each item would likely consume processing power depending on how many items you need to update in your level. I mean imagine having to loop and update thousands of objects.
On the other hand if you duplicate the map, then you use more memory but use less processing power since you already have the items duplicated beforehand and don’t have to update them one by one. As you can see it’s a trade-off between using more memory or using more processing power. At the end of the day, the best approach would depend on a variety of factors like - how large is the level; how much memory is available in the system, and that sort.
As for level streaming, I’m not sure how slow it will be or not to be able to say if it will work well. Like I said it might depend on how large the level is. This thread made me curious enough to read about level-streaming on the docs and it actually says the following:
So technically speaking it seems that the level is actually loaded into memory. However, people usually use the term memory rather loosely. If you have a background in computer science, you’ll understand that there are actually different kinds of memory from fastest to slowest (also most expensive to least expensive): Registers (used in processors) > VRAM > RAM > ROM
Usually when people talk about memory they actually mean RAM or system memory and that’s probably what the docs are referring to. Therefore, Level-streaming probably loads your level into RAM. On the other hand, I think what HavocX is talking about is VRAM or the memory in your video card. Having a duplicate of your map in the persistent level would mean it’s already loaded into VRAM, and logically speaking it should be faster for rendering on screen.