J'ai un script auquel j'ajoute un objet Terrain (je fais glisser et déposez le terrain dans le champ Terrain public).
Le Terrain est déjà configuré dans Unity pour avoir 2 PaintTextures: 1 est un carré (configuré avec une taille de tuile de sorte qu'il forme un motif à damier) et le 2ème est une image d'herbe:
La force cible du premier PaintTexture est également abaissée de sorte que le motif en damier révèle également une partie de l'herbe en dessous.
Maintenant, je veux, au moment de l'exécution, changer la taille des carreaux du premier PaintTexture, c'est-à-dire avoir plus ou moins de vérificateurs en fonction des différentes conditions d'exécution. J'ai parcouru la documentation d'Unity et j'ai vu que vous disposiez du Terrain.terrainData.SplatPrototype
tableau qui vous permet de changer cela. Il y a aussi une RefreshPrototypes()
méthode sur l' terrainData
objet et une Flush()
méthode sur l' Terrain
objet. J'ai donc fait un script comme celui-ci:
public class AStarTerrain : MonoBehaviour {
public int aStarCellColumns, aStarCellRows;
public GameObject aStarCellHighlightPrefab;
public GameObject aStarPathMarkerPrefab;
public GameObject utilityRobotPrefab;
public Terrain aStarTerrain;
void Start () {
//I've also tried NOT drag and dropping the Terrain on the public field
//and instead just using the commented line below, but I get the same results
//aStarTerrain = this.GetComponents<Terrain>()[0];
Debug.Log ("Got terrain "+aStarTerrain.name);
SplatPrototype[] splatPrototypes = aStarTerrain.terrainData.splatPrototypes;
Debug.Log("Terrain has "+splatPrototypes.Length+" splat prototypes");
SplatPrototype aStarCellSplat = splatPrototypes[0];
Debug.Log("Re-tyling splat prototype "+aStarCellSplat.texture.name);
aStarCellSplat.tileSize = new Vector2(2000,2000);
Debug.Log("Tyling is now "+aStarCellSplat.tileSize.x+"/"+aStarCellSplat.tileSize.y);
aStarTerrain.terrainData.RefreshPrototypes();
aStarTerrain.Flush();
}
//...
Le problème est que rien n'est changé, la carte du vérificateur n'est pas re-carrelée. Les sorties de la console me disent correctement que j'ai l'objet Terrain avec le bon nom, qu'il a le bon nombre de prototypes splat et que je modifie le tileSize sur l'objet SplatPrototype correspondant à la bonne texture. Il me dit également que la valeur a changé. Mais rien n'est mis à jour dans la vue graphique réelle.
Alors, que me manque-t-il?