Моя проблема сейчас заключается в том, что импорт этих файлов работает в
единство, но не работает на моем Oculus Go.
Большая часть глючного кода работает в редакторе, но вы обнаружите проблему с кодом при развертывании или сборке проекта.
Ваша проблема в функции UpdateImage
:
WWW www = new WWW(pfad);
image.texture = www.texture;
...
Вы должны уступить или дождаться завершения запроса WWW
перед загрузкой изображения. Запрос асинхронный. Без этого вы будете пытаться получить доступ к неполному изображению, что приведет к повреждению или серому изображению в зависимости от платформы.
Внести следующие изменения:
1 . Измените UpdateImage
на функцию сопрограммы (void
до IEnumerator
), затем выдайте запрос WWW
с yield return www;
, прежде чем получить доступ к текстуре из нее:
2 . Вызовите функцию UpdateImage
как функцию сопрограммы с помощью StartCoroutine
:
Заменить:
SimpleFileBrowser.FileBrowser.ShowLoadDialog( (path) => { UpdateImage(path); }, null, false, null, "Select File", "Select");
с
SimpleFileBrowser.FileBrowser.ShowLoadDialog( (path) => { StartCoroutine(UpdateImage(path)); }, null, false, null, "Select File", "Select");
3 . Проверьте наличие ошибок, прежде чем получить доступ к текстуре. По завершении запроса WWW
может произойти ошибка. Проверьте это перед использованием возвращенной текстуры или элемента.
Окончательный код должен выглядеть следующим образом:
public RawImage image;
public void OpenExplorer()
{
SimpleFileBrowser.FileBrowser.SetFilters(true, ".txt", ".jpg", ".png", ".mp4");
SimpleFileBrowser.FileBrowser.ShowLoadDialog((path) => { StartCoroutine(UpdateImage(path)); }, null, false, null, "Select File", "Select");
}
IEnumerator UpdateImage(string pfad)
{
if (pfad != null)
{
WWW www = new WWW(pfad);
//WAIT UNTIL REQUEST IS DONE!
yield return www;
//Check for error
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
}
else
{
image.texture = www.texture;
var texWidth = www.texture.width;
var texHeight = www.texture.height;
if (texWidth > texHeight)
{
GetComponent<RectTransform>().sizeDelta = new Vector2(1920 / 2, 1080 / 2);
}
if (texWidth < texHeight)
{
GetComponent<RectTransform>().sizeDelta = new Vector2(1080 / 2, 1920 / 2);
}
}
}
}