如何在代码

时间:2016-11-16 15:31:59

标签: c# unity3d textures renderer terrain

我想通过代码更改地形纹理的偏移量(2)。 我在地形上添加了道路图像作为纹理。 我在网上找到了相关代码,但在这种情况下我无法弄清楚渲染器的作用。

除了代码之外,我只想知道为了通过代码更改纹理应该采取的第一步。 (基本上是设置)。 请注意渲染器的作用。

enter image description here

3 个答案:

答案 0 :(得分:4)

在Unity Terrains中,纹理由SplatPrototype类处理。 See documentation

  

Splat原型只是TerrainData使用的纹理。

因此,如果您想要更改地形纹理,您必须创建一个新的SplatPrototype并将其设置为 splatPrototype TerrainData的变量。

您可以设置自己选择的metallicnormalMapsmoothnesstexturetileSizetileOffset的值。< / p>

您可以使用以下方法:

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;
}

答案 1 :(得分:0)

这是为我而生的

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

答案 2 :(得分:0)

Splat原型已弃用。我改用TerrainLayers编辑纹理的拼贴大小。

    float[,,] splatMapData = terrain.terrainData.GetAlphamaps(0, 0, 100, 100);
    for (int i = 26; i < 100; i++)
    {
        for (int j=0; j < 100; j++)
        {
            splatMapData[i, j, 0] = 0;
            splatMapData[i, j, 1] = 0;
            splatMapData[i, j, 2] = 1;
        }
    }
    TerrainLayer[] layers = terrain.terrainData.terrainLayers;
    layers[2].tileSize = new Vector2(100, 100);
    terrain.terrainData.SetAlphamaps(0, 0, splatMapData);
    terrain.Flush();