У меня есть скрипт, к которому я добавляю объект Terrain (я перетаскиваю ландшафт в открытом поле Terrain).
Terrain уже настроен в Unity, чтобы иметь 2 PaintTextures: 1 - квадрат (установлен с размером плитки, чтобы он формировал клетчатый рисунок), а второй - изображение травы:
Также целевая сила первой PaintTexture понижена, так что клетчатый узор также показывает часть травы под ним.
Теперь я хочу, чтобы во время выполнения изменить размер плитки первой PaintTexture, т.е. иметь больше или меньше контролеров в зависимости от различных условий выполнения. Я просмотрел документацию Unity и увидел, что у вас есть Terrain.terrainData.SplatPrototype
массив, который позволяет вам это изменить. Также есть RefreshPrototypes()
метод на terrainData
объекте и Flush()
метод на Terrain
объекте. Поэтому я сделал такой скрипт:
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();
}
//...
Проблема в том, что ничего не меняется, карта проверки не перебирается. Выводы консоли правильно сообщают мне, что у меня есть объект Terrain с правильным именем, что у него правильное количество прототипов splat и что я изменяю tileSize объекта SplatPrototype, соответствующего правильной текстуре. Это также говорит мне, что значение изменилось. Но ничто не обновляется в реальном графическом представлении.
Так что, пожалуйста, чего мне не хватает?