Unity, MacOS, не может загружать аудио из StreamingAssets с помощью www.SendWebRequest()

Я работаю над приложением для Windows, созданным в Unity. Все аудиофайлы находятся в streamingAssets, поэтому клиент может заменить их и настроить приложение. У меня есть следующий код, загружающий аудиофайлы в Audio Sources, и он отлично работает в Windows.

void SetAudioFromStreamingAssets()
{
    if (string.IsNullOrEmpty(StreamingAssetFilePath)) return;
    string fullpath = Application.streamingAssetsPath + "/" + StreamingAssetFilePath;
    if (!File.Exists(fullpath)) return;

    StartCoroutine(SetAudioClipFromFile(source,fullpath));
}

IEnumerator SetAudioClipFromFile(AudioSource audioSource, string path)
{
    using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(path, AudioType.UNKNOWN))
    {
        yield return www.SendWebRequest();
        if (www.isNetworkError)
        {
            VisDebug.AppendTxt("ERROR. Could not load music file: " + www.error, true);
        }
        else
        {
            AudioClip myClip = DownloadHandlerAudioClip.GetContent(www);
            audioSource.clip = myClip;
        }
    }
}

Мой коллега пытается работать над проектом, но у него есть только Mac. И звук не загружается на его Mac. Код достигает этой строки..

VisDebug.AppendTxt("ERROR. Could not load music file: " + www.error, true);

Таким образом, File.Exists является истинным, а также истинным является www.isNetworkError. и www.error это...

Не удается подключиться к целевому хосту

РЕДАКТИРОВАТЬ

Ответ ниже правильный, и просто к вашему сведению, вот пример того, как путь должен выглядеть на macos.

файл:///Users/spoopy/Documents/GitHub/Thing/Assets/StreamingAssets/GameLoad.wav

Возможно, путь переменной не такой, как ожидалось. Немного смущен, поскольку вы сказали, что создаете для Windows, но в заголовке написано mac. Также path.combine работает лучше, чем ручная манипуляция

BugFinder 11.01.2023 02:54

@BugFinder, если бы путь был неверным, то File.Exists был бы ложным.

Guye Incognito 11.01.2023 02:56

Зависит от пути. Потому что c:\\myfile существует. Но это не веб-адрес: P

BugFinder 11.01.2023 11:36
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел "Заголовок" в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
0
3
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны добавить к пути префикс file:// в MacOS и Linux.

Вы можете поместить что-то подобное после определения вашей переменной.

#if UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
    fullpath  = "file://" + path);
#endif

Источник

Поэтому, если я использую ваш код, «file://» никогда не добавляется. Я также пытался добавить его вручную, чтобы получить такой путь... file://Users/bm/Documents/GitHub/Killatron/Assets/StreamingA‌​ssets/GameLoad.wav, и я получаю другую ошибку «Неверный URL-адрес "

Guye Incognito 11.01.2023 19:17

Куда ты добавил мои строки? Это должно работать, но только в том случае, если платформа ваших проектов настроена на MacOS Standalone. Полученный URI должен выглядеть следующим образом: file:///Users/bm/Documents/GitHub/Killatron/Assets/Streaming‌​Assets/GameLoad.wav Обратите внимание на дополнительную косую черту в качестве первого символа вашего пути перед добавлением file://

ephb 11.01.2023 19:45

Я тестировал на Mac, и да, комбинация LOC просто ничего не делает. Я попробую с 3 косыми чертами после файла сейчас...

Guye Incognito 11.01.2023 20:09

Так что path.Combine на всякий случай ничего не делает. Но это решает проблему. #if UNITY_STANDALONE_OSX || Путь UNITY_EDITOR_OSX = "file://"+ путь; #endif Если вы обновите ответ upir, я отмечу его принятым (кстати, вы забыли поставить if в 1-й строке флага компилятора)

Guye Incognito 11.01.2023 20:58

Я внес изменения. Хорошо, что это работает для вас сейчас.

ephb 11.01.2023 21:43

Другие вопросы по теме