谁能告诉我我的方法的优点/缺点?
我有状态效果,作为脚本对象的技能,具有独特的字段,对于每个游戏中的角色都不同(如持续时间、伤害、施法时间,这都取决于个人角色的统计数据)。此外,我在其中拥有大部分逻辑,即仅通过每个对象的 StatusController/SkillCastingController 中的事件进行控制。所以我想出了使用: Object.Instantiate(assigned shared ScriptableObject instance) 为每个人提供单独的实例。
Object.Instantiate(ScriptableObject) 的内存开销很大吗?因为它将在运行时以这种方式大量使用(在运行时应用状态效果 = 使用 Object.Instantiate)。
我只是希望,以这种方式使用 ScriptableObjects 就像它们是简单的类一样工作,不同之处仅在于在编辑器中创建和编辑它们的能力。如果这个假设成立 - Object.Instantiate(在检查器 StatusEffect/Skill ScriptableObject 中分配)与使用复制构造函数创建简单类的新实例相同(new StatusEffect(statuseffects[0]/Skills[0]))。如果这是真的 - 不应该有很多内存使用,对吧?
来自专业人士的引用,有什么想法吗?:
SO 只是一个为在 Unity 序列化中具有方便含义的数据而设计的类。如果您正在创建 SO 的运行时实例,这是确保运行时只读的常见模式,那么您只是在复制根 ScriptableObject 的内存。因为 Object.Instantiate 不会隐式复制任何子资产,如果它们被根引用,则克隆将保持对原始 Scriptable Object 子资产的引用。除非这些 ScriptableObjects 分配大量内存,否则重复的不利影响应该是名义上的。