Получить имена файлов из подпапки ресурсов - PullRequest
0 голосов
/ 19 октября 2018

В моей папке «Ресурсы» есть подпапка для изображений, я хотел бы получить все имена файлов этих изображений из этой папки.

попробовал несколько Resources.loadAll методов, чтобы впоследствии получить .name, нобез успеха

была ли правильная практика для достижения того, что я пытаюсь сделать здесь?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Нет встроенного 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);
}
0 голосов
/ 19 октября 2018

Хм ... почему бы не попробовать это.

using System.IO;

Const String path = ""; /file path

private void GetFiles()
{
     string [] files = Directory.GetFiles (path, "*.*");
     foreach (string sourceFile in files)
     {
          string fileName = Path.GetFileName (sourceFile);
          Debug.Log("fileName");
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...