UnrealCSharp
UnrealCSharp copied to clipboard
UnrealCSharp, based on .NET 7 (Mono), is a C# programming plugin for UE.
类似verse做法,注册个资源类型,可在资源管理器上看到相应C#类资源,让C#成为一等公民[dog]
as the title indicates, to enable AOT
https://github.com/mono/CppSharp 这个库只需要提供头文件和.lib文件就可以自动生成绑定代码 源码的 Engine\Intermediate\Build\Win64\UnrealEditor\Inc\ 文件夹下有UHT生成的反射文件 Engine\Intermediate\Build\Win64\x64 文件夹下是编译模块时的宏 Engine\Binaries\Win64里的dll导出成lib就可以用了 再把DllImport改成MethodImplOptions.InternalCall应该就能用 CppSharp是一个C#的库,功能很强大,就是教程有点少,只有几篇官方文档 https://github.com/mono/CppSharp/tree/main/docs 也没有对所有API介绍,有些函数只能自己猜 可能对一些复杂的模板类不能导出 我还看到虚幻还可以将整个引擎导出成一个库 在C#就可以启动UE,但也不是很好用,而且只支持Windows平台 https://docs.unrealengine.com/5.2/zh-CN/building-unreal-engine-as-a-library/ 实际导出后发现dll没有export所有函数,只有文档里的4个内置api 查看UBT的Definination发现导出时没有将XXX_API宏define为DLLEXPORT 请问大佬知道怎么才能导出函数吗 最近的.Net7 新增的NativeAOT可以将C#代码导出为C++可以调用的DLL,唯一的缺点是只能导出static函数
干得漂亮啊,话说什么时候可以用于生产了呢,目前支持哪些平台?
定时器快速生成(0.1s) 随机AIMoveTo的Charactor 运行时间太长导致异常.
实际对性能影响未测试, 仅为猜测, Remove 和 Find 等可替换为 内置实现 1. int32 TGarbageCollectionHandleMapping::Remove(const MonoObject* InKey) 2. MonoObject* FContainerRegistry::GetObject(const void* InAddress) 3. T* TGarbageCollectionHandleMapping::Find(const MonoObject* InMonoObject) 4. bool FContainerRegistry::RemoveReference(const void* InAddress) 5. bool FDelegateRegistry::RemoveReference(const...
有些项目可能不想把所有代码都放到一个Game.dll中,希望可以更灵活点,支持使用者自己创建项目编译出的dll可以在编辑器中使用


假如基础开发框架是在C#这边,在功能上很多情况下可能会存在UE对象的生命周期需要跟随某个C#对象的生命周期,因为C#的这个机制,就意味着在析构函数中一定不能去写UObject对象的操作逻辑,但很多时候又需要一个结束时机,现在的情况就是处理这种情况只能手动调用 目前手动增加了异步模块去处理 