Посмотри работу с системой и ассетами
Типо
AssetDatabase.CreateAsset(asset, path);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Для сохранения файлов в качестве ассетов
var stream = new FileStream(path), FileMode.OpenOrCreate, FileAccess.Write);
var writer = new BinaryWriter(stream);
writer.Write(anyChar);
writer.Close();
stream.Close();
Для записи текстовой информации в файл
До аудио пользователя нужно будет просить пользователя указать путь, затем сохранять пути в виде текста и загружать при запуске уровня. Поищите по запросу типа Load user sounds at runtime in unity.
Примерно по такому же запросу можно найти как грузить файлы в сеть через unity.
Впринципе можно всё что вы хотите найти если писать запросы на английском. Если с англ проблемы, то гугл переводчик переводит достаточно точно чтобы понять суть или сформулировать вопрос.
Ставить препятствия лучше по некой сетке. Сетку можно сделать округляя значения позиции объекта до каких-то кратных значений. Создание объектов - Instantiate - вы просто текущий объект, который тащите через него создаёте в виде копии. Лучше ограничить количество объектов каждого типа. Вам нужно будет завести счётчики для всех объектов.