Random tilemap

I want to make tilemap that will randomize each tile every time I start the game. Basic rule tiles dоn`t work so because they have one noise for random. Can I somehow make it without looping through every tile and randomizing it on start?

You want to make a new tile class.

Here’s a barebones example, based on Unity’s RandomTile. All I’ve done is use Random.Range() instead of a seeded hash to create the random value. Because Random.Range will produce a different result every call, this means that every refresh you’ll receive a different random.

    [CreateAssetMenu("2D/Tiles/Random Refresh Tile", "New RandomRefreshTile")]
    [Serializable]
    public class RandomRefreshTile : Tile
    {
        /// <summary>
        /// The Sprites used for randomizing output.
        /// </summary>
        [SerializeField]
        public Sprite[] m_Sprites;

        /// <summary>
        /// Retrieves any tile rendering data from the scripted tile.
        /// </summary>
        /// <param name="position">Position of the Tile on the Tilemap.</param>
        /// <param name="tilemap">The Tilemap the tile is present on.</param>
        /// <param name="tileData">Data to render the tile.</param>
        public override void GetTileData(Vector3Int position, ITilemap tilemap, ref TileData tileData)
        {
            base.GetTileData(position, tilemap, ref tileData);
            if ((m_Sprites != null) && (m_Sprites.Length > 0))
            {
                int idx = Random.Range(0, m_Sprites.Length);
                tileData.sprite = m_Sprites[idx];
            }
        }
    }

In the long run it would be best to make a MapGeneration script. That lets you have maximal flexibility for whatever map generation rules you want to enforce. There are several resources for this kind of stuff, like this article. Most of the time you do not want the random to change every refresh because you want to produce a consistent result.