В Unity Terrains текстуры обрабатываются SplatPrototype
класса. See documentation
Прототип Splat - это просто текстура, используемая TerrainData.
Так что, если вы хотите изменить Terrain «s Texture вы должны создать новый SplatPrototype
и установить его в splatPrototype переменной TerrainData
.
Там вы можете установить значения metallic
, normalMap
, smoothness
, texture
, tileSize
и tileOffset
по вашему выбору.
Вы можете использовать следующий метод:
private void SetTerrainSplatMap(Terrain terrain, Texture2D[] textures)
{
var terrainData = terrain.terrainData;
// The Splat map (Textures)
SplatPrototype[] splatPrototype = new SplatPrototype[terrainData.splatPrototypes.Length];
for (int i = 0; i < terrainData.splatPrototypes.Length; i++)
{
splatPrototype[i] = new SplatPrototype();
splatPrototype[i].texture = textures[i]; //Sets the texture
splatPrototype[i].tileSize = new Vector2(terrainData.splatPrototypes[i].tileSize.x, terrainData.splatPrototypes[i].tileSize.y); //Sets the size of the texture
splatPrototype[i].tileOffset = new Vector2(terrainData.splatPrototypes[i].tileOffset.x, terrainData.splatPrototypes[i].tileOffset.y); //Sets the size of the texture
}
terrainData.splatPrototypes = splatPrototype;
}
ThankYou. Я попробую и дам вам знать. –
@ConnorIglesias Хорошо, не забудьте отметить как разрешено, когда это будет сделано. –
@ConnorIglesias. Я думаю, что изменение текстуры ландшафта во время выполнения является тяжелой операцией, и ее следует избегать в реальном времени. Лично я использую этот метод во время загрузки уровня. –