当玩家访问一个新区域以创建随机地形时,这是必要的。目前我正在尝试解决这样的问题:地图上有一个隐藏的景观对象,从中制作了一个克隆,已经分配了一个随机高度图:
public class ChunkLoader : MonoBehaviour
{
public Terrain flat;
void Start()
{
Terrain terrain = Instantiate(flat, new Vector3(0, 0, 0), Quaternion.identity);
HMapGenerator(terrain);
}
Terrain HMapGenerator(Terrain terrain)
{
// ... //
terrain.terrainData.SetHeights(0, 0, heights);
return terrain;
}
}
但是,无论我如何搜索,我都没有找到可以在地图上显示克隆的属性或方法。要么我在原则上做错了问题,要么我错过了一些东西。
在此示例中,同时出现两个错误。
首先,没有理由将物体留在场景中。创建并配置好模板后,在项目中创建Assets/Prefabs文件夹,并将其场景层次树的模板拖入即可。之后,可以从场景中移除对象,如果需要,可以从项目文件中获取参考。
第二 - 创建对象的副本时,您应该记住它具有标准的所有属性,包括指向您未复制的其他组件的链接。在这种特殊情况下,该对象与预制
Terrain件与相同的组件相关联TerrainData,并且此数据作为单独的文件存储在磁盘上。结果,这一行:改变了副本和原始的整体高度图,这使整个想法无效。
该问题的解决方案是创建一个新的类对象
TerrainData:按照你想要的方式修改它,然后从中创建一个游戏对象
Terrain:然后在您的场景中创建一个空的游戏对象并将您的脚本附加到它。