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