Нет встроенного API для этого, потому что информация не после сборки.Вы даже не можете сделать это с тем, что в принятом ответе .Это будет работать только в редакторе.Когда вы строите проект, ваш код потерпит неудачу.
Вот что нужно сделать:
1 .Определите, когда нажимается кнопка построения или когда собирается произойти сборка в функции OnPreprocessBuild
.
2 .Получить все имена файлов с помощью Directory.GetFiles
, сериализовать его в json и сохранить в папке Resources .Мы используем json, чтобы упростить чтение отдельных имен файлов.Вам не нужно использовать JSON.Вы должны исключить расширение ". Meta" .
Шаг 1 и 2 выполняются в редакторе.
3 .После сборки или во время выполнения вы можете получить доступ к сохраненному файлу, который содержит имена файлов как TextAsset
с Resources.Load<TextAsset>("FileNames")
, а затем десериализовать json из TextAsset.text
.
НижеЭто очень упрощенный пример.Нет обработки ошибок, и это зависит от вас, чтобы реализовать.Приведенный ниже скрипт редактора сохраняет имена файлов, когда вы нажимаете кнопку «Создать»:
[Serializable]
public class FileNameInfo
{
public string[] fileNames;
public FileNameInfo(string[] fileNames)
{
this.fileNames = fileNames;
}
}
class PreBuildFileNamesSaver : IPreprocessBuildWithReport
{
public int callbackOrder { get { return 0; } }
public void OnPreprocessBuild(UnityEditor.Build.Reporting.BuildReport report)
{
//The Resources folder path
string resourcsPath = Application.dataPath + "/Resources";
//Get file names except the ".meta" extension
string[] fileNames = Directory.GetFiles(resourcsPath)
.Where(x => Path.GetExtension(x) != ".meta").ToArray();
//Convert the Names to Json to make it easier to access when reading it
FileNameInfo fileInfo = new FileNameInfo(fileNames);
string fileInfoJson = JsonUtility.ToJson(fileInfo);
//Save the json to the Resources folder as "FileNames.txt"
File.WriteAllText(Application.dataPath + "/Resources/FileNames.txt", fileInfoJson);
AssetDatabase.Refresh();
}
}
Во время выполнения вы можете получить имена сохраненных файлов, как показано в следующем примере:
//Load as TextAsset
TextAsset fileNamesAsset = Resources.Load<TextAsset>("FileNames");
//De-serialize it
FileNameInfo fileInfoLoaded = JsonUtility.FromJson<FileNameInfo>(fileNamesAsset.text);
//Use data?
foreach (string fName in fileInfoLoaded.fileNames)
{
Debug.Log(fName);
}