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

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

相关推荐
曼巴UE55 小时前
UE5.3 C++ 房屋管理系统(二)
ue5
ue星空5 小时前
UE5用TextureGraph制作瓷砖贴图材质
ue5·材质
藤蔓疯长5 小时前
UE5骨骼插槽蓝图
ue5
飞起的猪5 小时前
【虚幻引擎】UE5独立游戏开发全流程(商业级架构)
ue5·游戏引擎·游戏开发·虚幻·独立开发·游戏设计·引擎架构
朗迹 - 张伟20 小时前
UE5 PCG学习笔记
笔记·学习·ue5
笑鸿的学习笔记1 天前
虚幻引擎5-Unreal Engine笔记之摄像机与场景捕获相关概念的解析
笔记·ue5·虚幻
☆平常心☆2 天前
UE5通过C++实现TcpSocket连接
c++·ue5
电子云与长程纠缠2 天前
UE5中制作动态数字Decal
学习·ue5·编辑器·贴图
笑鸿的学习笔记4 天前
虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系
笔记·ue5·虚幻
笑鸿的学习笔记5 天前
虚幻引擎5-Unreal Engine笔记之UE编辑器退出时的保存弹框
笔记·ue5·虚幻