UE5 Assimp 自用

记录一下配assimp库到ue中的过程。因为想在ue里面实现一些几何处理(虽然ue好像有相关的geo的代码),遂配置了一下assimp。

  1. 编译+整理生成自己所需要的文件。cmake编译,下载github 的官方的assimp-master,然后cmake都是默认的就行(我是vs2022,x64其他应该也行的,见图一)。具体可以参考这个大佬(下面的链接)。我是做到了大佬的第六步那边。

在编译完的结果中(我是保存到新建的一个assimp-build的文件夹中了)取bin、lib两个文件夹,分别提供dll和lib文件。然后那些头文件啥的得从原来的assimp-master库里面给include复制出来。(图二)。讲道理其他不用的在复制出这些文件夹后都可以删了好像。~-~

tip1:注意!!!编译生成的文件夹里,也有include文件夹(assimp-build/include),那里面一个config.h也得拿出来,不然后面会报错缺少该文件。

最后这一步结束我就得到了一个待会要去build.cs里面声明路径的一个很简单轻快的文件夹:图三。包含assimp-build中的bin、lib,assimp-master中的include(偷偷把config.h也放到其中去了)。

​​​​​​​​​​​​​​[虚幻引擎][UE][C++]Assimp库安装编译,UE_Assimp插件安装使用,各种三维格式转换_ue assimp-CSDN博客

图一:

图二:

图三:

  1. build.cs配置

代码主要参考这篇大佬:

[UE5 Runtime Editor]1.运行时模型资源导入(上篇) - 哔哩哔哩

按照1中的配置,我最后的cs代码如图四:

(请无视其他的库啥的,主要是path那几段,Geo是我的项目名,ThirdParty自己创的)

(ps,自己vs中用的release版本编译的,所以路径里面都带个release)

图四:

cs 复制代码
using System;
using System.IO;
using UnrealBuildTool;

public class Geo : ModuleRules
{
	public Geo(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
	
		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput",
            "MeshDescription",
            "StaticMeshDescription",
			"MeshConversion",
            "ProceduralMeshComponent",
			"DynamicMesh",
            "GeometryCore",
            "GeometryScriptingCore",
            "GeometryFramework",
            "UMG",});

		PrivateDependencyModuleNames.AddRange(new string[] {  });

		string assimpPath= Path.Combine(ModuleDirectory, "../ThirdParty/assimp");

        string includePath = Path.Combine(assimpPath, "include");
        PublicIncludePaths.Add(includePath);
        //System.Console.WriteLine("assimp include path:" + includePath);

        string libPath = Path.Combine(assimpPath, "lib/Release/assimp-vc143-mt.lib");
        PublicAdditionalLibraries.Add(libPath);

        string dllPath = Path.Combine(assimpPath, "bin/Release/assimp-vc143-mt.dll");
        RuntimeDependencies.Add(dllPath);
        //System.Console.WriteLine("assimp dll path:" + dllPath);

        if (Target.Type == TargetType.Editor)
        {
            string dllOutputPath = Path.Combine(ModuleDirectory, "../../Binaries", "Win64", "assimp-vc143-mt.dll");
            if (!File.Exists(dllOutputPath))
            {
                File.Copy(dllPath, dllOutputPath);
            }
        }

	}
}
  1. 测试的话我用的也是procedural mesh+assimp(貌似还可以用dynamic mesh,和static mesh对应的,我还没搞明白)。同样参考下面这篇,但是copy代码的时候要注意。比方斯坦福中国龙那种model,里面没有normal?,很神奇,所以图五里面的HasNormals()要去掉,不然导入的模型会消失捏。

[UE5 Runtime Editor]1.运行时模型资源导入(上篇) - 哔哩哔哩

图五:

  1. UE项目中的问题。一开始还能用,但是后来我要修改一下game mode啥的,新建的c++类在UE项目的编辑器中找不到,但通过VS代码debug-本地调试器生成的那个编辑器中找得到。查了半天不知道为啥(现在也不太清楚核心原因)。

从工程上解释下我个人的理解:

UE项目编辑器中右下角有个living coding啥的(图六),那玩意一点就报错。我猜是VS写的很好了,但是编辑器看不到里面的东西。living coding编译总会报这个错:

cs 复制代码
Assimp4UE.cpp.obj : error LNK2019: 
无法解析的外部符号 "void __cdecl std::_Xlength_error(char const *)" (?_Xlength_error@std@@YAXPEBD@Z),
函数 "void __cdecl std::_Xlen_string(void)" (?_Xlen_string@std@@YAXXZ) 中引用了该符号 
E:\UE\Projects\Geo\Binaries\Win64\UnrealEditor-Geo.patch_0.exe : fatal error LNK1120: 1 个无法解析的外部命令

我问了deepseek,说是md和mt的问题。但实际上assimp官方的cmake文件里就都是mt,而且我也不太敢改cmake文件。反正就是很麻烦。官方论坛也有人讨论living coding的问题,一大堆总之就是好像std的库和UE适配有点大病?最后的解决方式也很简单,图六那个旁边不是有3个点嘛,把启动实时代码编写关掉,重新点一下左侧的那个重新编译就ok了。我记得这个好像哪个视频里老师讲过,但是现在不记得了。

图六:

  1. 都看到这了,推荐一个很好玩的纯蓝图的UE5 RPG项目教程:

https://www.youtube.com/playlist?list=PLiSlOaRBfgkcPAhYpGps16PT_9f28amXi

话说这年头找工作真不容易,有没有大佬指点一下,游戏、几何都可以做,工作方向仍然迷茫中。

相关推荐
ue星空2 天前
UE5配置MRQ编解码器输出MP4视频
ue5·音视频
吴梓穆8 天前
UE5 图片9宫格切割
ue5
Kingsdesigner9 天前
游戏开发流程革命:我用Substance插件,在UE5内实现材质的实时“创世纪”
游戏·adobe·ue5·游戏引擎·游戏开发·设计师·substance 3d
幻雨様11 天前
UE5多人MOBA+GAS 37、库存系统(四)
ue5
DoomGT11 天前
Physics Simulation - UE中Projectile相关事项
ue5·游戏引擎·虚幻·虚幻引擎·unreal engine
右弦GISer13 天前
【UE5医学影像可视化】读取本地Dicom生成VolumeTexture,实现2D显示和自动翻页
ue5·dicom·医学图像
小梦白13 天前
RPG增容3:尝试使用MVC结构搭建玩家升级UI(一)
游戏·ui·ue5·mvc
AgilityBaby14 天前
解决「CPU Virtualization Technology 未开启或被占用」弹窗问题
ue5·游戏引擎·无畏契约·cpu 虚拟化技术
幻雨様15 天前
UE5多人MOBA+GAS 番外篇:同时造成多种类型伤害
ue5
幻雨様16 天前
UE5多人MOBA+GAS 番外篇:同时造成多种类型伤害,以各种属性值的百分比来应用伤害(版本二)
java·前端·ue5