// Creates acoustic meshes from terrain objects and builds a mapping from GUIDs of the terrain
    // data to the generated acoustic meshes.
    private void BuildTerrainData(Terrain[] activeTerrains, string[] guidsForTerrains,
                                  Shader surfaceMaterialShader)
    {
        terrainAcousticMeshDataFromGuid.Clear();
        for (int terrainIndex = 0; terrainIndex < activeTerrains.Length; ++terrainIndex)
        {
            var    terrain = activeTerrains[terrainIndex];
            string guid    = guidsForTerrains[terrainIndex];

            // Generate an acoustic mesh for the terrain object.
            var acousticMesh = ResonanceAudioAcousticMesh.GenerateFromTerrain(terrain,
                                                                              surfaceMaterialShader);

            // If this guid is not mapped to a surface material yet, map it to the default surface
            // material.
            if (!surfaceMaterialFromGuid.ContainsKey(guid))
            {
                surfaceMaterialFromGuid.Add(guid, defaultSurfaceMaterial);
            }

            if (!terrainAcousticMeshDataFromGuid.ContainsKey(guid))
            {
                terrainAcousticMeshDataFromGuid[guid] = new TerrainAcousticMeshData();
            }
            TerrainAcousticMeshData data = terrainAcousticMeshDataFromGuid[guid];
            data.terrainData = terrain.terrainData;
            data.acousticMeshes.Add(acousticMesh);
        }
    }
    // Applies surface material to (the acoustic meshes) of terrains whose terrain data are
    // identified by |guid|.
    private void ApplySurfaceMaterialToTerrains(
        ResonanceAudioRoomManager.SurfaceMaterial surfaceMaterial, string guid)
    {
        TerrainAcousticMeshData acousticMeshesData = terrainAcousticMeshDataFromGuid[guid];
        var acousticMeshes = acousticMeshesData.acousticMeshes.ToList();

        for (int i = 0; i < acousticMeshes.Count; ++i)
        {
            acousticMeshes[i].SetSurfaceMaterialToAllSubMeshes(surfaceMaterial);
        }
    }
    // Creates acoustic meshes from terrain objects and builds a mapping from GUIDs of the terrain
    // data to the generated acoustic meshes.
    private void BuildTerrainData(Terrain[] activeTerrains, string[] guidsForTerrains,
                                  Shader surfaceMaterialShader)
    {
        terrainAcousticMeshDataFromGuid.Clear();
        for (int terrainIndex = 0; terrainIndex < activeTerrains.Length; ++terrainIndex)
        {
            var    terrain = activeTerrains[terrainIndex];
            string guid    = guidsForTerrains[terrainIndex];

            // Generate an acoustic mesh for the terrain object.
            var acousticMesh = ResonanceAudioAcousticMesh.GenerateFromTerrain(terrain,
                                                                              surfaceMaterialShader);
            materialMap.AddDefaultMaterialIfGuidUnmapped(guid);

            if (!terrainAcousticMeshDataFromGuid.ContainsKey(guid))
            {
                terrainAcousticMeshDataFromGuid[guid] = new TerrainAcousticMeshData();
            }
            TerrainAcousticMeshData data = terrainAcousticMeshDataFromGuid[guid];
            data.acousticMeshes.Add(acousticMesh);
        }
    }