UE4的中文讨论是真的少啊。
想找个办法做到类似Unity中DontDestroyOnLoad()的效果。让音乐物体等不会因场景切换而摧毁。找了半天。
GameInstance只能用来保留切换场景时的数据,无法对actor等产生作用。
幸好虚幻社区里是有这问题的讨论的,文档不够,社区来凑。中文不够,英文来凑。
总之结论是,在窗口-关卡 / Windows-Level中,可以设置固定关卡。再配合上Level Streaming/关卡流加载,就可以做到类似DontDestroyOnLoad()的效果。
就是说,固定关卡中的Actor,在使用流加载方式加载出新关卡物体时,不会被销毁。
默认情况下,当前关卡即为固定关卡。然后,把需要加载的关卡通通拖入窗口的固定关卡中。
之后,再配合蓝图或者C++里的流加载方式加载它们,就可以了。
图中,流加载了ThirdPersonExampleMap1这个关卡。并设置为了立即显示。
顺带一提,蓝图里的Open Level加载方式,即使是固定关卡的资源也会被卸载掉,所以必须配合流加载方式使用才有效。
官方文档:
蓝图流加载:https://docs.unrealengine.com/zh-CN/BuildingWorlds/LevelStreaming/HowTo/StreamWithBlueprints/index.html
关卡设置:https://docs.unrealengine.com/zh-CN/Basics/Levels/LevelsWindow/index.html
事件分发:https://docs.unrealengine.com/zh-CN/ProgrammingAndScripting/Blueprints/BP_HowTo/EventDispatcher/index.html