Я работаю над приложением для 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
@BugFinder, если бы путь был неверным, то File.Exists был бы ложным.
Зависит от пути. Потому что c:\\myfile существует. Но это не веб-адрес: P
Вы должны добавить к пути префикс file:// в MacOS и Linux.
Вы можете поместить что-то подобное после определения вашей переменной.
#if UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
fullpath = "file://" + path);
#endif
Источник
Поэтому, если я использую ваш код, «file://» никогда не добавляется. Я также пытался добавить его вручную, чтобы получить такой путь... file://Users/bm/Documents/GitHub/Killatron/Assets/StreamingAssets/GameLoad.wav, и я получаю другую ошибку «Неверный URL-адрес "
Куда ты добавил мои строки? Это должно работать, но только в том случае, если платформа ваших проектов настроена на MacOS Standalone. Полученный URI должен выглядеть следующим образом: file:///Users/bm/Documents/GitHub/Killatron/Assets/StreamingAssets/GameLoad.wav Обратите внимание на дополнительную косую черту в качестве первого символа вашего пути перед добавлением file://
Я тестировал на Mac, и да, комбинация LOC просто ничего не делает. Я попробую с 3 косыми чертами после файла сейчас...
Так что path.Combine на всякий случай ничего не делает. Но это решает проблему. #if UNITY_STANDALONE_OSX || Путь UNITY_EDITOR_OSX = "file://"+ путь; #endif Если вы обновите ответ upir, я отмечу его принятым (кстати, вы забыли поставить if в 1-й строке флага компилятора)
Я внес изменения. Хорошо, что это работает для вас сейчас.
Возможно, путь переменной не такой, как ожидалось. Немного смущен, поскольку вы сказали, что создаете для Windows, но в заголовке написано mac. Также path.combine работает лучше, чем ручная манипуляция