Eu tenho um script ao qual adiciono um objeto Terreno (arrasto e solto o terreno no campo Terreno público).
O Terrain já está configurado no Unity para ter 2 PaintTextures: 1 é um quadrado (configurado com um tamanho de ladrilho para formar um padrão quadriculado) e o segundo é uma imagem de grama:
Além disso, a força alvo da primeira PaintTexture é reduzida para que o padrão quadriculado também revele parte da grama embaixo.
Agora eu quero, em tempo de execução, alterar o tamanho do bloco da primeira PaintTexture, ou seja, ter mais ou menos verificadores, dependendo de várias condições de tempo de execução. Examinei a documentação do Unity e vi que você tem a Terrain.terrainData.SplatPrototype
matriz que permite alterar isso. Também há um RefreshPrototypes()
método no terrainData
objeto e um Flush()
método no Terrain
objeto. Então eu fiz um script como este:
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();
}
//...
O problema é que nada é alterado, o mapa do verificador não é remarcado. As saídas do console me dizem corretamente que eu tenho o objeto Terrain com o nome certo, que possui o número certo de protótipos de splat e que estou modificando o tileSize no objeto SplatPrototype correspondente à textura correta. Também me diz que o valor mudou. Mas nada é atualizado na visualização gráfica real.
Então, por favor, o que estou perdendo?