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

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

相关推荐
电子云与长程纠缠7 小时前
Unreal Niagara制作SubUV贴图翻页动画
学习·ue5·编辑器·贴图·niagara
子燕若水11 小时前
“Daz to Unreal”将 G8 角色(包括表情)从 daz3d 导入到 UE5。在 UE5 中,我发现使用某个表情并与闭眼混合后,上眼睑出现了问题
3d·ue5
半天法师18 小时前
UE5.2+VarjoXR3,Lumen、GI、Nanite无效的两种解决方案
ue5·xr·vr
ue星空18 小时前
UE5摄像机画面没有填充满屏幕有黑边
ue5
李詹2 天前
游戏开发核心技术解析——从引擎架构到攻防体系的完整技能树
架构·ue5·游戏引擎·游戏程序·3dsmax·虚幻
子燕若水2 天前
UE5的 Modify Curve 蓝图节点
ue5
人宅4 天前
UE5有些场景的导航生成失败解决方法
ue5
子燕若水4 天前
在 UE5 编辑器中,由于游戏设置 -> EV100 设置,点击播放前后的光照不同。如何保持点击播放前后的光照一致?
游戏·ue5·编辑器
m0_552200824 天前
《UE5_C++多人TPS完整教程》学习笔记36 ——《P37 拾取组件(Pickup Widget)》
c++·游戏·ue5