如何在运行时在瓦片上生成对象(树)? (Unity 2D Tilemap)

How to generate objects (trees) on tiles at runtime? (Unity 2D Tilemap)

我正在为一个大学项目制作一个看起来类似于 Rimworld(自上而下的殖民地模拟器)的游戏,我使用 perlin 噪声按程序生成我的地形,然后对于地图中的每个图块,我使用 SetTile() 来填充具有可步行地形的地图。

但是,我不确定如何处理生成(或实例化)对象,例如岩石、树木或可能与在地图上行走的角色交互的任何其他对象。

是否有更好(性能更高或更直观)的方式在某些图块上生成树,而不是使用 Instantiate(),与我的图块地图不同,它只是用树预制件填充我的整个层次结构?

如果一个角色要去砍那些树,是否每棵树都需要附加一个脚本,或者只让一个角色检查是否是他撞到的树来开始砍树就足够了?

Is there a better (more performant or more intuitive) way of generating trees on some tiles, instead of using Instantiate(), which just fills up my entire hierarchy with tree prefabs, unlike my tilemap?

不,我想你明白了。当然有一些方法可以优化这个过程,比如在玩家行走时生成地图(想想 minecraft 中的 'chunks')而不是一次全部生成。另外为什么不在一个空的父游戏对象下实例化树,这样你就可以隐藏它。

比如bullets(这里用到了对象池,这是另外一次的主题):

And if a character were to go chop those trees, does every tree need to have a script attached to it, or is it enough to just have a character check if that's a tree that he collided with to start chopping it?

你可以,或者你当然可以在你的播放器中处理它。你想要什么,由你决定。