Я нашел решение после тестирования нескольких разных методов. Вызов SetTile () для большого l oop любого вида имеет высокую производительность. Есть еще один метод, который вы можете вызвать, если вам нужно разместить много плиток, например SetTileBlock (). Это позволяет избежать этих Tilemap.TileSyncCallbacks и refreshTile () или, по крайней мере, сохранить их как минимум.
Вот мой код для того, что я сделал, чтобы исправить это в моем вопросе выше.
public void loadTerrainFromChunk(MyChunk chunk)
{
Tile[] terrainTiles = new Tile[chunkSize * chunkSize];
for (int i = 0; i < chunkSize; i++)
{
for (int j = 0; j < chunkSize; j++)
{
Vector3Int tempVect = new Vector3Int(chunk.tiles[i, j].index.x, chunk.tiles[i, j].index.y, 0);
int tempIndex = i + (j * chunkSize);
if (chunk.tiles[i, j].tileIDs[0] != -1)
{
terrainTiles[tempIndex] = ScriptableObject.CreateInstance("Tile") as Tile;
terrainTiles[tempIndex].sprite = StaticDatabase.database.Tiles[chunk.tiles[i, j].tileIDs[0]].sprite;
terrainTiles[tempIndex].name = StaticDatabase.database.Tiles[chunk.tiles[i, j].tileIDs[0]].name;
Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0f, 0f, 90f * seededRandom.Next(3)), Vector3.one);
terrainTiles[tempIndex].transform = matrix;
terrainTiles[tempIndex].flags = TileFlags.None;
terrainTiles[tempIndex].color = chunk.tiles[i, j].tileColors[0];
}
}
}
terrainMap.SetTilesBlock(new BoundsInt(chunk.index.x*chunkSize, chunk.index.y*chunkSize, 1, chunkSize, chunkSize, 1), terrainTiles);
}
Все, что вам нужно сделать, это
1) Создать массив для хранения ваших плиток.
2) Создать экземпляры плиток, которые вы хотите, и загрузить их в массив.
3) (Необязательно) Измените плитки в этом массиве.
4) Загрузите этот массив в функцию SetTilesBlock ().
Хорошего дня!