Отправить запрос в Unity

Я пытаюсь сделать запрос POST от Unity3D на свой веб-сервер. В редакторе все работает корректно, но когда я собираю бинарники и пытаюсь сделать из них тоже самое - не похоже, что доходит до сервера.

На сервере я обрабатываю их как:

if(isset($_POST['name']) || isset($_POST['score']))
{
    $name = $_POST['name'];
    $score = $_POST['score'];
    ....
}

А в Unity/С# я делаю так:

IEnumerator Upload()
{
    WWWForm form = new WWWForm();
    form.AddField("name", name.text.Replace("|", " ").ToString());
    form.AddField("score", (int)(highScore));
    UnityWebRequest www = UnityWebRequest.Post("https://server_name.com/page.php", form);
    yield return www.Send();
}

Есть ли причина, по которой это должно работать в редакторе и не должно работать при запуске встроенных двоичных файлов?

Спасибо!

РЕДАКТИРОВАТЬ: В соответствии с запросом - мои двоичные файлы были созданы для Windows и Linux, и оба имеют одну и ту же ошибку. Я запускаю редактор в Windows (та же машина, на которой я использовал двоичный файл Windows) - и у меня нет проблем с редактором.


person Zgragselus    schedule 01.08.2017    source источник
comment
Попробуйте вернуть значение из php, затем попытайтесь прочитать его в Unity и проверьте, есть ли ошибка. В то же время было бы неплохо упомянуть, на какой платформе вы строите и примеряете это.   -  person Programmer    schedule 01.08.2017
comment
Итак, я собрал это для Linux и Windows — проблема присутствует в обоих. Я запускаю редактор на машине с Windows (и оттуда работает тот же код).   -  person Zgragselus    schedule 01.08.2017
comment
Ok. Делайте то, что я сказал выше. Запустите его в редакторе и убедитесь, что вы получили значение, отправленное из php с помощью UnityWebRequest.downloadHandler.text. Теперь создайте его и посмотрите, сможете ли вы получить такое же значение. Также проверьте UnityWebRequest.error, чтобы увидеть, есть ли какая-либо ошибка.   -  person Programmer    schedule 01.08.2017
comment
Закончил без ошибок в редакторе - и получил значение.   -  person Zgragselus    schedule 01.08.2017
comment
И я считаю, что нашел проблему - сразу после вызова загрузки я загружаю следующую сцену (не дожидаясь завершения Coroutine) - что может быть корнем проблемы.   -  person Zgragselus    schedule 01.08.2017
comment
Или (для проверки) просто не меняйте сцену и смотрите, что получится в результате запроса. Если вы измените сцену, связанные с ней MonoBehaviours будут уничтожены, а запущенные сопрограммы остановятся.   -  person mayo    schedule 01.08.2017


Ответы (1)


Я даже не понимаю, как это работает внутри редактора...

Вы не следуете способу, описанному в документе:

https://docs.unity3d.com/ScriptReference/WWWForm.html

Вам вообще не нужно использовать UnityWebRequest: только WWW и WWWForm.

Попробуй это :

IEnumerator Upload () {
    WWWForm form = new WWWForm();
    form.AddField("name", name.text.Replace("|", " ").ToString());
    form.AddField("score", (int)(highScore));

    WWW result = new WWW("https://server_name.com/page.php", form );

    yield return result;

    if(!string.IsNullOrEmpty(result.error)) {
        print( "Error : " + result.error );
    } else {
        Debug.Log(result.text);
    }
}

Изменить:

Хорошо, мой плохой, ваш пример есть в документе. Я не знал, что WWW развивается (Хорошее единство общения...).

Итак, вот мой совет: продолжайте использовать устаревший WWW. Он работает отлично.

Потому что это классическое единство: когда говорят, что вышла новая функция, значит, она сломана.

person FLX    schedule 01.08.2017