Bootstrap

UE4异步加载场景(1)

1
说UE4异步加载场景,首先大家都能想到的就是流关卡(Level Streaming),这也是一种比较常见的异步加载场景的方法,官方提供了比较详细的使用方法大家可以看官方文档。
我们这里不说流关卡(Level Streaming)这种方式,我们用异步加载场景依赖资源的方式来解决异步加载场景的问题。说到异步加载场景依赖资源包,其实官方提供了如何获得蓝图依赖资源的函数接口。我自己只要稍微封装一下做成小工具就可以了。
第一篇呢我们就主要介绍这个工具,我会把工具插件附在文章末尾供大家下载。代码量很少有兴趣的大家可以阅读一下。
这个工具的功能就是把场景依赖的所有资源路径存储到一张DataTable中,这样其实就相当于这个场景的依赖资源路径都有了。后面我们进行异步加载场景时候直接加载DataTable的资源路径即可。
后面一篇我会把我地异步加载场景代码贴给大家。(UE版本4.23)图片已经标注了按钮功能,就是导出当前场景的所有依赖资源,并且还提供了一个根据场景表格,一次行导出多场景的依赖资源,大家配置一下场景表格,点一下表格导出就是根据场景表格导出
图片已经标注了按钮功能,就是导出当前场景的所有依赖资源,并且还提供了一个根据场景表格,一次行导出多场景的依赖资源,大家配置一下场景表格,点一下表格导出就是根据场景表格导出.
我发现资源审核有点慢,因为插件本身代码很少我贴代码出来给大家,下面这个代码就是核心插件代码。

// Fill out your copyright notice in the Description page of Project Settings.


#include "ExpoortJsonSceneEditor.h"
#include "AssetRegistryModule.h"
#include "DesktopPlatform/Public/IDesktopPlatform.h"
#include "SlateApplication.h"
#include "DesktopPlatform/Public/DesktopPlatformModule.h"
#include "FileHelper.h"
#include "FileHelpers.h"
#include "DataConfig.h"
#include "Editor.h"

void UExpoortJsonSceneEditor::RecursiveGetDependencies(const FName& PackageName, TArray<FName>& AllDependencies, bool isFirst)
{
   
	if (!PackageName.IsNone())
	{
   
		FAssetRegistryModule& AssetRegistryModule = FModuleManager::Get().LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry"));
		TArray<FName> Dependencies;
		AssetRegistryModule.Get().GetDependencies(PackageName, Dependencies);
		if (isFirst &&
			!AllDependencies.Contains(PackageName) &&
			AddToSourceMapCondition(PackageName.ToString()))
		{
   
			AllDependencies.Add(PackageName);
		}

		for (auto DependsIt = Dependencies.CreateConstIterator(); DependsIt; ++DependsIt)
		{
   
			if 
;