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

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

相关推荐
Zhichao_9711 分钟前
【UE5.1 C++】VS2022下载安装
ue5
m0_5522008211 小时前
《UE5_C++多人TPS完整教程》学习笔记37 ——《P38 变量复制(Variable Replication)》
c++·游戏·ue5
曹勖之11 小时前
在 UE5 蓝图中配置Actor类型的Asset以作为位置和旋转设置目标
ue5·机器人
曹勖之11 小时前
UE 5 和simulink联合仿真,如果先在UE5这一端结束Play,过一段时间以后**Unreal Engine 5** 中会出现显存不足错误
matlab·ue5·机器人
AgilityBaby11 小时前
UE5 2D角色PaperZD插件动画状态机学习笔记
笔记·学习·ue5
AgilityBaby11 小时前
UE5 创建2D角色帧动画学习笔记
笔记·学习·ue5
ue星空4 天前
UE音频中间件wwise插件
学习·ue5·音视频
AgilityBaby5 天前
UE5打包项目设置Project Settings(打包widows exe安装包)
c++·3d·ue5·游戏引擎·unreal engine
AgilityBaby6 天前
UE5蓝图暴露变量,在游戏运行时修改变量实时变化、看向目标跟随目标Find Look at Rotation、修改玩家自身弹簧臂
笔记·游戏·ue5·游戏引擎·蓝图
努力的悟空6 天前
UE5.4.4+Rider2024.3.7开发环境配置
ue5