Пятница, 29 Марта 2024, 16:20

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » [Решено] Передача данных с помощью WWW и WWWForm
[Решено] Передача данных с помощью WWW и WWWForm
8Observer8Дата: Вторник, 05 Мая 2015, 19:12 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Привет!

При нажатии на кнопку должны отослаться две переменные в скрипт на PHP, а этот скрипт должен передать их значения обратно в Unity приложение, которое выведит их на экран. Видимо, переменные не передаются, так как Unity выводит моё сообщение: Error: cannot get veriables.

Unity
Код
    public void clickNext()
       {
           StartCoroutine("next");
       }

       IEnumerator next()
       {
           WWWForm form = new WWWForm();
           form.AddField("lesson_num", "1");
           form.AddField("verb_num", "2");
           WWW www = new WWW("http://stepbystep.freeoda.com/get_phrase.php", form);
           yield return www;
           output.text = www.text;
       }


get_phrase.php
Код
<?php

//require "./connect.inc.php";

if ( isset( $_POST["lesson_num"] ) && isset( $_POST["verb_num"] ) )
{
       $lessonNum = $_POST["lesson_num"];
       $verbNum = $_POST["verb_num"];
          
       echo $lessonNum . " " . $verbNum;
}
else
{
       echo "Error: cannot get veriables.";
}


Заранее спасибо за любую помощь


Сообщение отредактировал 8Observer8 - Вторник, 29 Декабря 2015, 23:41
VinchensooДата: Среда, 06 Мая 2015, 07:07 | Сообщение # 2
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Визуально у меня такой же код работает. Но у меня nodeJS на сервере

PoidetLiДата: Среда, 06 Мая 2015, 07:19 | Сообщение # 3
участник
Сейчас нет на сайте
должен работать, если хост поддерживает пхп.

Добавлено (06 мая 2015, 07:19)
---------------------------------------------
замени isset на !empty,


в еюдуго прсхлуренц
http://gcup.ru/forum/9-44187-1 мой Project 96


Сообщение отредактировал PoidetLi - Среда, 06 Мая 2015, 07:12
8Observer8Дата: Среда, 06 Мая 2015, 11:53 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Цитата PoidetLi ()
замени isset на !empty

Заменил. Не помогло

Я вывел переменные:

Код
<?php
        $lessonNum = $_POST["lesson_num"];
        $verbNum = $_POST["verb_num"];
            
        var_dump($lessonNum, $verbNum);

if ( !empty( $_GET["lesson_num"] ) && !empty( $_GET["verb_num"] ) )
{
        $lessonNum = $_GET["lesson_num"];
        $verbNum = $_GET["verb_num"];
            
        echo $lessonNum . " " . $verbNum;
}
else
{
        echo "Error: cannot get veriables.";
}


Вывод:
Цитата
NULL
NULL
Error: cannot get veriables.


Добавлено (06 мая 2015, 11:13)
---------------------------------------------
Что интересно, такой код работает из редактора Unity на локальном сервере, который я запускаю через XAMPP:

Вывод:
Цитата
1 2


Код

       public void clickNext()
       {
           StartCoroutine("next");
       }

       IEnumerator next()
       {
           WWWForm form = new WWWForm();
           form.AddField("lesson_num", "1");
           form.AddField("verb_num", "2");
           WWW www = new WWW("localhost/Unity/Polyglot/get_phrase.php", form);
           yield return www;
           output.text = www.text;
       }


get_phrase.php
Код

<?php
//    $lessonNum = $_GET["lesson_num"];
//    $verbNum = $_GET["verb_num"];
          
//    var_dump($lessonNum, $verbNum);

if ( !empty( $_POST["lesson_num"] ) && !empty( $_POST["verb_num"] ) )
{
       $lessonNum = $_POST["lesson_num"];
       $verbNum = $_POST["verb_num"];
          
       echo $lessonNum . " " . $verbNum;
}
else
{
       echo "Error: cannot get veriables.";
}


Добавлено (06 мая 2015, 11:36)
---------------------------------------------
Вот что я сделал:
Edit -> Project Settings -> Host URL = http://stepbystep.freeoda.com/crossdomain.xml

На удалённом сервере в корне расположил файл crossdomain.xml:
Код
<?xml version="1.0" encoding="ASCII"?>
<cross-domain-policy>
<allow-access-from domain="*" secure="false"/>
</cross-domain-policy>


Адрес скрипта:
Код
    IEnumerator next()
       {
           WWWForm form = new WWWForm();
           form.AddField("lesson_num", "1");
           form.AddField("verb_num", "2");
           WWW www = new WWW("stepbystep.freeoda.com/get_phrase.php", form);
           yield return www;
           output.text = www.text;
       }


При запуске из редактора Unity работает нормально:
Цитата
1 2


Но если отгружаю файлы приложения (html и unity3d) на сервер, то не работает. Если с выводом переменных, то получаю:
Цитата
NULL
NULL
Error: cannot get veriables.


get_phrase.php
Код
<?php
       $lessonNum = $_POST["lesson_num"];
       $verbNum = $_POST["verb_num"];
          
       var_dump($lessonNum, $verbNum);

if ( !empty( $_POST["lesson_num"] ) && !empty( $_POST["verb_num"] ) )
{
       $lessonNum = $_POST["lesson_num"];
       $verbNum = $_POST["verb_num"];
          
       echo $lessonNum . " " . $verbNum;
}
else
{
       echo "Error: cannot get veriables.";
}


Добавлено (06 мая 2015, 11:53)
---------------------------------------------
Мне кажется, что из редактора работает, так как я ставлю в "WWW Security Emulation": Edit -> Project Settings -> Host URL = http://stepbystep.freeoda.com/crossdomain.xml

А когда пакетирую в приложение и загружаю на сервер, то эта настройка перестаёт работать. Это только предположение

Если из редактора запускать с выводом переменных (var_dump), то так выглядит:
Цитата
string(1) "1"
string(1) "2"
1 2


Сообщение отредактировал 8Observer8 - Среда, 06 Мая 2015, 11:54
VinchensooДата: Среда, 06 Мая 2015, 12:13 | Сообщение # 5
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Если у тебя клиент и сервер расположены в одном домене, то кроссдомейн.хмл вообще ни при чем.

8Observer8Дата: Среда, 06 Мая 2015, 12:23 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Подвожу итог. На данный момент ситуация такая: из редактора работает, а если отгрузить на сервер - не работает

Опишу подробно. В настройкам у меня стоит:
Edit -> Project Settings -> Host URL = http://stepbystep.freeoda.com/crossdomain.xml

В корне сайта лежит:
crossdomain.xml:
Код
<?xml version="1.0" encoding="ASCII"?>
<cross-domain-policy>
<allow-access-from domain="*" secure="false"/>
</cross-domain-policy>


get_phrase.php
Код
<?php
     $lessonNum = $_POST["lesson_num"];
     $verbNum = $_POST["verb_num"];
      
     var_dump($lessonNum, $verbNum);

if ( !empty( $_POST["lesson_num"] ) && !empty( $_POST["verb_num"] ) )
{
     $lessonNum = $_POST["lesson_num"];
     $verbNum = $_POST["verb_num"];
      
     echo $lessonNum . " " . $verbNum;
}
else
{
     echo "Error: cannot get veriables.";
}


Unity:
Код
    public void clickNext()
     {
         StartCoroutine("next");
     }

     IEnumerator next()
     {
         WWWForm form = new WWWForm();
         form.AddField("lesson_num", "1");
         form.AddField("verb_num", "2");
         WWW www = new WWW("http://stepbystep.freeoda.com/get_phrase.php", form);
         yield return www;
         output.text = www.text;
     }


Запуск из редактора:
Цитата
string(1) "1"
string(1) "2"
1 2


Отгружаю на сервер (нужно нажать кнопку "Далее") --> ссылка

Получаю:
Цитата
NULL
NULL
Error: cannot get veriables.
seamanДата: Среда, 06 Мая 2015, 17:00 | Сообщение # 7
старожил
Сейчас нет на сайте
Цитата
The WWW class will use GET by default and POST if you supply a postData parameter.

Попробуй $_GET
8Observer8Дата: Среда, 06 Мая 2015, 17:23 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Цитата seaman ()
Попробуй $_GET

GET тоже не катит. Может это баг Unity. Попробую поставить патч
berilДата: Среда, 06 Мая 2015, 19:14 | Сообщение # 9
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Какая версия Unity? Скачай последнюю версию Unity (патч), там должны были пофиксить.



Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
PoidetLiДата: Среда, 06 Мая 2015, 19:36 | Сообщение # 10
участник
Сейчас нет на сайте
Цитата beril ()
последнюю версию Unity (патч), там должны были пофиксить.

Поэтому я ненавижу движки с закрытыми исходниками


в еюдуго прсхлуренц
http://gcup.ru/forum/9-44187-1 мой Project 96
NovaSurferДата: Четверг, 07 Мая 2015, 08:06 | Сообщение # 11
частый гость
Сейчас нет на сайте
Цитата PoidetLi ()
Поэтому я ненавижу движки с закрытыми исходниками

Пфф.. смешно, я думаю, что если бы ты увидел исходники, то и 20% от всего кода не понял. А чтобы самому что-то исправить в чужом коде, тем более в игровом движке такого уровня, ну это надо быть просто гуру программирования


Мой блог - infcode.com
PoidetLiДата: Четверг, 07 Мая 2015, 08:13 | Сообщение # 12
участник
Сейчас нет на сайте
Цитата NovaSurfer ()

Пфф.. смешно, я думаю, что если бы ты увидел исходники, то и 20% от всего кода не понял. А чтобы самому что-то исправить в чужом коде, тем более в игровом движке такого уровня, ну это надо быть просто гуру программирования

проблема в том что, можно или самому через тяжесть исправить или искать пользовательские фиксы, который выйдут раньше официальных wink да и я нормально разбираюсь в чужом коде


в еюдуго прсхлуренц
http://gcup.ru/forum/9-44187-1 мой Project 96


Сообщение отредактировал PoidetLi - Четверг, 07 Мая 2015, 08:17
8Observer8Дата: Вторник, 29 Декабря 2015, 11:10 | Сообщение # 13
заслуженный участник
Сейчас нет на сайте
Получалось ли у кого-нибудь отгрузить WebGL (или WebPlayer) приложение на один сервер и из него обратиться к MySQL на Unity 5.3 на другом сервере?

Сообщение отредактировал 8Observer8 - Вторник, 29 Декабря 2015, 11:10
VinchensooДата: Вторник, 29 Декабря 2015, 18:01 | Сообщение # 14
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Цитата 8Observer8 ()
Получалось ли у кого-нибудь отгрузить WebGL (или WebPlayer) приложение на один сервер и из него обратиться к MySQL на Unity 5.3 на другом сервере?

Именно к mysql или имеешь ввиду post/get к веб-серверу?


8Observer8Дата: Вторник, 29 Декабря 2015, 18:48 | Сообщение # 15
заслуженный участник
Сейчас нет на сайте
Цитата Vinchensoo ()
Именно к mysql или имеешь ввиду post/get к веб-серверу?

Хорошая наводка. Сейчас хотя бы echo проверю.

Добавлено (29 декабря 2015, 18:18)
---------------------------------------------
Из Unity работает, то есть с PC - работает, получаю строку: Ok, we get: Hello. Сейчас соберу приложение в WebGL и на Google Drive.

На всякий случай, приведу какой у меня сейчас код:

Скрипт на клиенте:



Скрипт на сервере:



Добавлено (29 декабря 2015, 18:47)
---------------------------------------------
Собрал в WebGL, отгрузил на Google Drive - не работает. Ничего не получаю. Сейчас попробую отгрузить на тот же сервер.


Сообщение отредактировал 8Observer8 - Вторник, 29 Декабря 2015, 19:05
VinchensooДата: Вторник, 29 Декабря 2015, 20:47 | Сообщение # 16
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Цитата 8Observer8 ()
Собрал в WebGL, отгрузил на Google Drive - не работает. Ничего не получаю. Сейчас попробую отгрузить на тот же сервер.

crossdomain.xml наверное


8Observer8Дата: Вторник, 05 Апреля 2016, 18:47 | Сообщение # 17
заслуженный участник
Сейчас нет на сайте
Цитата Vinchensoo ()
crossdomain.xml наверное

Мне ответили, что для WebGL crossdomain.xml не нужен и отослали к документации. Там тоже прочитал, что:
Цитата
This is similar to the crossdomain.xml requirement in the Unity Web Player, but the protocol is different.


Вот так попробую:



Добавлено (29 декабря 2015, 21:37)
---------------------------------------------
Не получилось так как я выше написал. Опять из редактора приходит строка от сервера, а когда собираю в WebGL, то приходит пустая строка. Я нашёл такую же проблему, то там человек отправляет CORS вместе с данными.

Добавлено (29 декабря 2015, 22:47)
---------------------------------------------
И если задавать CORS в C# скрипте - тоже не катит:



Добавлено (29 декабря 2015, 23:40)
---------------------------------------------
Я решил проблему! Вместо Google Drive Hosting я отгрузил на другой бесплатный хостинг.

Вот мои скрипты:

Unity side:


Server side:


Добавлено (04 апреля 2016, 17:04)
---------------------------------------------
Вариант ASP.NET и Unity (ПК клиент). Из скрипта на Unity отправляю имя "Ivan", а с сервера ASP.NET возвращается "Hello, Ivan"

Я использую бесплатный хостинг ASP.NET: http://somee.com/

Unity side:


Server side:


P.S. Лично для меня удобнее использовать ASP.NET, так как это тоже C# и не нужно изучать новый язык (то есть PHP). Вместо MySQL использую SQLite в связке с ASP.NET, что тоже удобно, так как на ПК и андройде можно использовать SQLite, значит, не нужно пока изучать MySQL. К тому же, скорее всего, на всех платформах можно использовать LinqToSql, что удобнее чистого SQL и единообразно

Добавлено (05 апреля 2016, 18:47)
---------------------------------------------
Хотя с другой стороны изучать PHP и MySQL тоже интересно и полезно. Я сейчас делаю на MySQL регистрацию и логин с клиента на Unity

Может кому пригодится бесплатный, стабильный хостинг без рекламы с PHP и MySQL и бесплатным доменом: http://www.freewebhostingarea.com/


Сообщение отредактировал 8Observer8 - Вторник, 05 Апреля 2016, 18:47
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » [Решено] Передача данных с помощью WWW и WWWForm
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг