2015-05-26 2 views
2

У меня возникают проблемы с построением webgl для единства, использующего ftp-соединение для хранения и загрузки XML-файлов. Все отлично работает в редакторе и на локальном ftp-сервере (используя Xlight). Но когда я построить решение WebGL и попытаться сохранить XML-файл, я получаю следующее сообщение об ошибке:Ошибка FTP Webgl

> Uncaught abort() at Error 
    at jsStackTrace (http://localhost:8080/Development/WebGL.js:875:12) 
    at stackTrace (http://localhost:8080/Development/WebGL.js:889:21) 
    at abort (http://localhost:8080/Development/WebGL.js:3830852:24) 
    at _pthread_create (http://localhost:8080/Development/WebGL.js:13183:2) 
    at __ZN6il2cpp2os10ThreadImpl3RunEPFvPvES2_ [il2cpp::os::ThreadImpl::Run(undefined?F?*, void, void*)] (http://localhost:8080/Development/WebGL.js:3596270:50) 
    at Array.__ZN6il2cpp2os6Thread3RunEPFvPvES2_ [il2cpp::os::Thread::Run(undefined?F?*, void, void*)] (http://localhost:8080/Development/WebGL.js:3746555:7) 
    at Object.dynCall_iiii (http://localhost:8080/Development/WebGL.js:3807075:39) 
    at invoke_iiii (http://localhost:8080/Development/WebGL.js:16008:32) 
    at Array.__ZN6il2cpp6icalls8mscorlib6System9Threading6Thread15Thread_internalEP12Il2CppThreadP14Il2CppDelegate [il2cpp::icalls::mscorlib::System::Threading::Thread::Thread_internal(Il2CppDelegate?**)] (http://localhost:8080/Development/WebGL.js:2708698:6) 
    at Object.dynCall_iii (http://localhost:8080/Development/WebGL.js:3813716:38) 

У меня Absolutley не знаю, что это значит и как это исправить удаленно. Мои интересы в серверных технологиях на самом деле не всегда были высокими, поэтому помощь в этом вопросе была бы весьма признательна.

Это мой код для загрузки XML настоящее время я использую:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://localhost/construct.xml"); 
    request.Method = WebRequestMethods.Ftp.UploadFile; 
    request.Credentials = new NetworkCredential("name", "password"); 

    string xml = xmlDoc.OuterXml; 
    byte[] bytes = Encoding.UTF8.GetBytes(xml); 

    Stream requestStream = request.GetRequestStream(); 
    requestStream.Write(bytes, 0, bytes.Length); 
    requestStream.Close(); 

    FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
    response.Close(); 

Если есть что-нибудь еще я оставил вне чем пожалуйста, дайте мне знать. Заранее спасибо!

+0

Я мог ошибаться, но AFAIK вы не можете использовать WebRequest в экспортированной HTML5 игре из Unity. – gman

+0

Нельзя ли использовать его в редакторе при переключении на платформу webgl? Там он отлично работал. Но когда я использую платформу веб-плеера единства и тестирую его в редакторе, он дает сообщения об ошибках и отказывается строить для веб-плеера, потому что он не распознает webrequestmethods.ftp (он отключен для веб-проигрывателя). – OdinLord

ответ

0

Невозможно использовать WebRequest с экспортированными проектами Unity HTML5, так как WebRequest полагается на потоки. Экспорт Unity в HTML5 не поддерживает потоки (пока). Ключевая часть трассировки стека заключается в следующем:

at _pthread_create (http://localhost:8080/Development/WebGL.js:13183:2) 

Ни один из PTHREAD методов API не реализованы emscripten. В какой-то момент в будущем у нас может быть поддержка потоков в JavaScript из разных браузеров, но теперь она недоступна.

Обратите внимание, что это работает в редакторе даже с выбранной платформой WebGL, поскольку Unity не ограничивает .NET-профиль для платформы WebGL так же, как для веб-плеера. Мы рассматриваем использование профилей для предоставления более ранних сведений об ошибках для таких платформ, как WebGL, но мы еще не реализовали его.

+0

Спасибо за ответ. Наверное, мне нужно найти другой путь. – OdinLord

+0

Да, к сожалению, сейчас это ограничение платформы WebGL. –

+0

Извините за напыщенность, но WebGL не является платформой. Браузеры/HTML5 - это платформа. WebGL - это API. Почему Unity, похоже, делает это настолько запутанным для пользователей. Подобно тому, как Unity первоначально называет «UnityScript», поскольку JavaScript не закончил путаницу. Точно так же, назвав это «платформой WebGL» или «WebGL» вместо «HTML» или браузера, что-то более подходящее снова не приведет к путанице для пользователей – gman