在众多关卡中来回切换,就出现了一个问题,因为子关卡不能获取到其他关卡中的数据,所以需要一个公共的变量来进行记录所需要的数据,进行获取以及设置。
示例:两个子关卡中都有控件蓝图,分别有两个按钮,点击后加载对应的场景
一、创建基于GameInstance类的蓝图类命名为MyGameInstance
1.在文件夹空白处右键创建蓝图类,在类型中的其他类中搜索GameInstance,命名为MyGameInstance
2.打开创建的MyGameInstance,创建变量类型为int的变量命名为localLevelIndex,权限更改为公开。(只是用于测试)
3.在工具栏选择编辑/项目设置,选择 项目/地图&模式 ,在GameInstance 选项中选择自己创建的MyGameInstance
二、文件夹空白处右键创建两个关卡,(可以用前两节的关卡)分别命名
1.我的关卡命名为LeveStreamingVolume,及TwoLevelStreaming,打开固定关卡,将两个关卡作为子关卡拖入到固定关卡下方。
2.子关卡前方的眼睛代表的是在当前固定关卡中是否可以看到子关卡的物体,如果关闭,子关卡中对应的物体将会消失,选中其中的子关卡进行设置,分别拖入正方体和球,摆放好位置(一号关卡中 为正方体,二号关卡中 为球)
三、创建控件蓝图。
1.文件夹空白处右键创建User Interface下的控件蓝图,命名为OneUMG,先创建一个 另外一个直接复制粘贴就可以。
2.打开创建的控件蓝图,在设计师面板,创建两个按钮,并在按钮下添加text 文本框,分别命名为场景一,及场景二,放好位置
3.选择场景二的button控件,细节面板中最下方选择 OnClick,点击 + 号 ,进入图表中
4.编辑卸载当前关卡,加载二号子关卡逻辑
首先先要获取到GameInstance中的变量,使用节点Get GameInstance ,然后将获取到的GameInstance转换类型为MyGameInstance,这样才可以获取到指定的数据变量,使用get locallevelinde节点,为了方便使用该变量,可以在控件蓝图中创建一个int 类型变量来接收关卡全局变量。
LocalLevelIndex为提升变量,用来记录当前值,该操作每次当关卡加载的时候都会执行一次。
5.在刚才自动创建的按钮响应事件节点,编辑逻辑,当点击按钮后更改全局变量并加载二号关卡,并卸载当前关卡。
使用switch int节点进行判断当前全局变量值。
6.复制一份UMG,命名为TwoUMG,将场景一的按钮按上面的方式进行创建执行方法,更改设置的全局变量值,及加载、卸载关卡的名称
四、打开对应的子关卡蓝图,创建控件,显示UMG
1.可以在Blueprints,下选择子蓝图进行编辑子关卡蓝图。(或者选择在文件夹中创建的子关卡,单独打开)
2.显示UMG
LeveStreamingVolume 关卡蓝图
towLevelStreaming 关卡蓝图
说明:当子关卡加载后,子关卡蓝图有BeginPlay节点的 会自动执行。
五、在主关卡中,WorldLevel,编辑关卡蓝图,设置全局变量值,及加载LeveStramingVolume子关卡,并显示鼠标。
五、运行
初始状态
点击场景二按钮
点击场景一按钮
如果有多个子关卡,可以设置一个函数,用于判断全局变量值,返回当前关卡名称,直接连接到要卸载的关卡名称上,人物在固定关卡中,如果在子关卡,当子关卡被卸载的时候,人物也会跟随卸载。可以尝试在每个子关卡中有单独的人物。