请选择 进入手机版 | 继续访问电脑版
MSIPO技术圈 首页 IT技术 查看内容

【UE4 C++】根据指定路径生成静态网格体

2023-07-13

在上一篇博客中(【UE C++】蓝图调用C++函数),我们用C++创建了一个蓝图函数库,本篇文章在这个蓝图函数库基础上增加一个方法,该方法只需输入一个文件目录路径,就可在场景中生成该目录下得所有静态网格体。(如果不想写C++的话,可以用这篇文章的方法:UE4 | BP | 使用蓝图获取Uasset资源_ue4 蓝图加载uasset资产

在.cpp文件中增加如下代码:

TArray<UObject*> UMyBlueprintFunctionLibrary::FindOrLoadAssetsByPath(const FString& FilePath)
{
	TArray<UObject*> LoadedObjects;

	EngineUtils::FindOrLoadAssetsByPath(FilePath, LoadedObjects, EngineUtils::ATL_Regular);
	return LoadedObjects;
}

 在.h文件中添加如下代码:

UFUNCTION(BlueprintCallable, Category="LibraryFunction")
	static TArray<UObject*> FindOrLoadAssetsByPath(const FString& FilePath);

编译后,打开虚幻编辑器,新建一个父类为Actor的蓝图类,这里命名为“BP_CreateStaticMesh”

 打开“BP_CreateStaticMesh”,添加一个静态网格体组件

 添加一个变量,这里命名为“Mesh”

“Mesh”变量的变量类型是静态网格体的对象引用。勾选可编辑实例、生成时公开

 在构造函数中添加如下节点,这样在“BP_CreateStaticMesh”生成时,就能根据传入给Mesh的模型来生成静态网格体

 再新建一个Actor蓝图,这里命名为“BP_CreateStaticMeshByPath”

 打开“BP_CreateStaticMeshByPath”,在事件图表中添加如下节点

 

 如下是我静态网格体的存放路径

 

将“BP_CreateStaticMeshByPath”拖入视口

 运行游戏可以看到生成了静态网格体

 

有时候用户想自己改变这个静态网格体,该如何做?我目前进展是:

首先打包设置中,取消勾选“使用Pak文件”,这样打包后Content文件夹中就不再仅是一个.pak文件,而是和打包前工程目录中的Content文件夹一样。

 打包后,比如我删除了“Key”这个文件夹,场景中确实不会出现对应的静态网格体,还原后也还是能生成之前的静态网格体。

 但是让人头大的是打包后的模型不再是FBX或是obj之类的模型,而是变成了.uasset格式文件,这样用户就不能直接向文件夹中导入一个3D模型让引擎调用。

我特地搜了一下如何将FBX转.uasset格式文件,例如:[UE4 convert .fbx to .uasset commandlet] - #7 by nyudeb - Pipeline & Plugins - Epic Developer Community Forums

,但是即使生成了.uasset文件还是不行,我将.uexp文件删除后,打包后的exe就无法运行并且弹出报错的窗口。

如果路过的大佬有什么见解,还希望在评论区指点一下,谢谢~

参考文章

1. UE4 根据文件夹路径生成文件夹下的所有静态网格体(蓝图)_ue4将静态网格体转换成蓝图

2. UE4 替换打包后的项目资源 - 知乎

3. UE4 | BP | 使用蓝图获取Uasset资源_ue4 蓝图加载uasset资产

相关阅读

热门文章

    手机版|MSIPO技术圈 皖ICP备19022944号-2

    Copyright © 2024, msipo.com

    返回顶部