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;
}
Thankyou. Je l'essaie et je vous le fais savoir. –
@ConnorIglesias Ok, n'oubliez pas de marquer comme résolu quand c'est fait –
@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. –