【问题标题】:Using stl containers with Unreal在 Unreal 中使用 stl 容器
【发布时间】:2017-08-30 12:11:30
【问题描述】:

我可以使用 std::vector、std::unordered_map 代替 TMap、TVector...等吗?

我需要一个类来序列化它的所有信息,并且我的代码已经可以与 stl 一起使用。

我测试过尝试在它们上使用 UPROPERTY,但这是不可能的,(有什么办法吗?)。不过我没问题。

我需要知道的是当整个类的某些成员是 stl 容器时序列化整个类会发生什么

【问题讨论】:

    标签: stl stdvector unreal-engine4


    【解决方案1】:

    不应使用它们。

    除了与外部库进行通信之外,您不应使用标准 C++ 库,如果您使用它们,则应避免在它们上使用 UFUNCTION 和 UPROPERTY。 https://answers.unrealengine.com/questions/180421/how-to-use-c-standard-library-std.html

    如果需要序列化属性,我建议使用 Rama 的系统 (UE Wiki)。我在我的游戏中使用它来保存/加载数据到二进制文件,但它可以很容易地扩展为通过网络发送数据。

    基本上,在该系统中,您正在重载 << 运算符。优点是您可以在一个地方定义所有结构,并且一个函数可以用于保存和加载。 注意,我在尝试编译以下代码时遇到了编译问题:

    TArray<UObject> array = // init
    
    // ar is container to serialization
    ar << array;
    

    但我通过将UObjects 映射到UStructs 解决了这个问题,所以代码类似于

    TArray<FStruct> array = // init
    
    // as is container to serialization
    ar << array;     // now, this will compile
    

    在 UE 4.15 中,可能在以后的版本中已解决。

    如果你想进一步了解我对 Rama 系统系统的实现,可以查看我的游戏库TCF2 (GitHub)。您正在寻找/Source/GameSave/[Public|Private]/SaveGameCarrier - 这是我的主要储蓄课程。映射助手的示例可以在/Source/Inventory/Public/InventoryHelpers.h中找到

    【讨论】:

    • 谢谢帕维尔。似乎 Stack Overflow 作为答案中心的工作效率比 Unreal 的 :D 高得多。感谢您的链接和代码。 TArrays、FVectors 等似乎足够高效。我正在开发一个非常低级的软件和库,我们需要极端优化。希望它们和 STL 容器一样好。
    • 好吧,你碰巧在寻找我知道的答案。我对您最后三个问题的回答纯属巧合 :) 关于优化:我相信它确实是优化的,因为 UE 的所有部分,包括引擎和编辑器,都依赖于它。而且它受虚幻的内存管理,所以你不需要显式调用newdelete操作符。但是如果你在使用低级库,你可以自己管理内存,但是你需要实现机制来为引擎和游戏本身提供数据。
    • 如果您正在寻找有关自定义内存管理的更多信息,请查看wiki.unrealengine.com/… 另外,我的提示是当您搜索有关 UE 的内容时,请尝试在搜索查询中添加“rama”。 Rama 在 UE 方面拥有丰富的经验,他还撰写了有关它的精彩文章。 (我认为他现在是 UE 开发者之一)。
    • 他现在在做 UE 吗?我肯定会雇用他的。他是一个真正的传奇,帮助了所有像我这样的新手。考虑到他也是一名开发人员,他在 youtube 上的瑜伽视频真的很酷,而且有点令人震惊。哈哈。我们的图书馆很好地管理了内存。我担心的是虚幻。我将描述我的场景。这将是一个缓慢的过程...谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2011-07-24
    • 2021-11-08
    相关资源
    最近更新 更多