2016-11-16 12 views
2

Я хочу изменить смещение текстуры ландшафта через код. Я добавил изображение дороги как текстуру на местности. Я нашел связанный код онлайн, но в этом случае я не могу определить роль рендеринга.Как изменить текстуру местности в коде

Больше, чем код, я просто хочу знать первый шаг, который нужно предпринять, чтобы изменить текстуру с помощью кода. (Настройки в основном). И, пожалуйста, укажите роль рендеринга.

enter image description here

ответ

2

В 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; 
} 
+0

ThankYou. Я попробую и дам вам знать. –

+0

@ConnorIglesias Хорошо, не забудьте отметить как разрешено, когда это будет сделано. –

+0

@ConnorIglesias. Я думаю, что изменение текстуры ландшафта во время выполнения является тяжелой операцией, и ее следует избегать в реальном времени. Лично я использую этот метод во время загрузки уровня. –

0

ЭТО WOKED ДЛЯ МЕНЯ

splat[i].tileOffset = new Vector2(tar.splatPrototypes[i].tileOffset.x, tar.splatPrototypes[i].tileOffset.y+5f);