Tag: 对象池

Unity:需要在返回池时重置池化对象。 也许使用ScriptableObject?

我最近一直在尝试统一对象池,以便一次加速几个游戏对象的实例化。 但是,由于这些是相当复杂的对象,我需要在它们返回池中时重置它们。 我读到使用ScriptableObject可能是存储默认值以便轻松重置的好方法。 但为了做到这一点,我需要在运行时加载一个新的ScriptableObject来存储对象的实际值。 所以在伪代码中,我有一个带有public MyScriptableData data和public MyScriptableData defaults 1)使用默认的ScriptableObject data = defaults;创建新的池化对象data = defaults; ; 2)在对象的生命周期内做更改脚本对象值的东西 3)取消激活,然后将池化对象返回池,将scriptableObject重置为其默认值( data = defaults;再次)。 我有3个主要问题: A)我不确定如何实际实现这一点。 在我看来,在步骤2中,默认值将被更改。 因此,重置为默认值将不起作用。 我考虑使用创建我的脚本对象的新实例 data = ScriptableObject.CreateInstance(); 但是,我将如何从默认值中复制默认值,确保永远不会更改默认值? 我希望默认值可以在Unity编辑器中作为资产进行编辑。 B)如果我使用CreateInstance,性能会不好? 我正在做这个对象池的全部原因是为了降低对象实例化的性能成本。 我不想通过实例化脚本化对象来重新引入慢速代码。 C)这种方法好吗? 还是有更好的方法在返回池之前重置对象? 编辑基于一些答案:我已经有一个具有很长字段列表的设置,然后将这些字段的默认值存储在字典中。 但我发现每次我想添加/更改/删除字段时,我都必须在几个位置更改代码 ATTEMPTED SOLUTION(但错误,见下文):我为ScriptableObject创建了一个扩展方法: using UnityEngine; using System.Reflection; public static class ScriptableObjectExtension { public static T ShallowCopy (this T […]

是否有.NET的通用对象池?

在时间和记忆方面,我有一个构建成本昂贵的类。 我想维护这些东西的池,并在同一过程中根据需要将它们分配给多个线程。 是否存在已经过测试和validation的通用对象池? (我不想要COM +汇集。)