2016-11-16 3 views
2

Je veux changer le décalage (2) de la texture du terrain par le code. J'ai ajouté une image de route comme texture sur le terrain. J'ai trouvé du code en ligne, mais je n'arrive pas à comprendre le rôle du moteur de rendu dans ce cas.comment modifier la texture du terrain dans le code

Plus que du code, je veux juste savoir la première étape qui devrait être prise afin de changer la texture par le code. (Paramètres essentiellement). Et s'il vous plaît mentionner le rôle de renderer.

enter image description here

Répondre

2

Dans les textures Unity sont traitées par Terrains de la classe SplatPrototype. See documentation

Un prototype Splat est une texture utilisée par TerrainData.

Donc, si vous voulez changer la Texture de Terrain vous devez créer une nouvelle SplatPrototype et le mettre à la splatPrototype variable de TerrainData.

Là, vous pouvez définir les valeurs de metallic, normalMap, smoothness, texture, tileSize et tileOffset de votre choix.

Vous pouvez utiliser la méthode suivante:

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. Je l'essaie et je vous le fais savoir. –

+0

@ConnorIglesias Ok, n'oubliez pas de marquer comme résolu quand c'est fait –

+0

@ConnorIglesias Je pense que la modification de la texture Terrain lors de l'exécution est une opération lourde et devrait être évitée en temps réel. Personnellement, j'utilise cette méthode lors du chargement de niveau. –

0

CE woked POUR MOI

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