我正在创建一个无限的2D地形生成器,并且其中包含各种图块/块。另外,某些磁贴具有特殊功能,这些功能在其自己的脚本中进行了描述。
例如,一个蜂巢砖可以在其周围产生蜜蜂。如果附近有草等,土瓦会变成草。
现在,所有这些图块几乎都是相同的游戏对象,除了它们之间的唯一区别是它们使用的精灵(图标)和描述其行为的脚本。
现在,我可以轻松地对所有瓷砖进行预制,并在加载新地形时实例化预制件,并在卸载时销毁预制件,但是对于垃圾收集器来说,这肯定不是一个好主意,因为这些瓷砖会生成在几秒钟内达到100秒的数量。
此外,这里对象池不是不是选项,因为一开始我需要创建的对象太多(成千上万)。
所以,这是我的问题:
我有一个上面贴有污垢脚本的泥瓦。经过一段时间后,我想将其转换为具有Grass脚本组件但没有Dirt的草块。
除了删除Dirt脚本和添加Grass脚本以外,还有其他更好的转换这些GameObject的方法吗?另外,大量添加和删除组件的效率如何?
答案 0 :(得分:3)
您说池化不是一种选择,但是我建议使用lazy loading为池创建对象。您可以在不需要大量时间的情况下为首次出现创建这些对象,并在需要时创建更多对象。
答案 1 :(得分:1)
您可以制作一个包含不同类型图块的父游戏对象。然后根据需要激活/停用孩子。
您的层次结构如下所示:
Tile (Holds switching functionality)
|->Dirt Tile (Holds 'Dirt' functionality)
|->Grass Tile (Holds 'Grass' functionality)
|->Water Tile (Holds 'Water' functionality)
|-> ...
例如,当您希望图块为Dirt
时,您可以激活Dirt Tile
下的Tile
游戏对象并停用所有其他子项。
让我知道它是否有帮助。