Как переслать переменную на сайт сервера?

Программирование на Юнити.

Как переслать переменную на сайт сервера?

Сообщение Sergasteam 24 мар 2012, 13:02

Подскажите пожалуйста. У меня такой вопрос. Исходя из моего давнейшего топика
Скрытый текст:
http://unity3d.ru/distribution/viewtopic.php?f=18&t=3718


про вывод очков в юнити,я теперь не могу создать такой запрос на сервер:
1. чтобы скрипт сервера php получил переменную из юнити
2. Полученная переменная была обработана,вставлена в запрос mysql
3. и вывелись только те поля в unity3d которые соответствуют запросу.

Например:
У меня есть 3 поля ID,NAME,SCORE,1 таблица SCORES. мне нужно сделать так чтобы в конце каждого пройденного уровня, юнити обращался к серверу для сравнения значения SCORE:int(mysql) с текущим значением var point:int=100000;(Unity3d) для уникального NAME с конкретным ID,и если текущее значение point>SCORE то UPDATE SCORES WHERE ID=kompID(эта переменная для каждого компьютера своя,которая так же сравнивается для уникальности в базе mysql,и тоже должна быть получена из юнити)

Из последнего ответа моего топика который выше,я скачал 2 скрипта как пример,addscore.php,display.php, первый как раз выгружает данные из юнити второй загружает данные в юнити. Может как то надо написать запрос в самом юнити чтобы отослать переменную скрипту display.php, а потом вывести обратно в юнити? Короче я уже не знаю что делать,прошу помочь.
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

Re: Как переслать переменную на сайт сервера?

Сообщение Sergasteam 24 мар 2012, 13:18

ну а вот именно как у меня составлен php скрипт:

Скрытый текст:
<?php

$db = mysql_connect("localhost", "root", "" ) or die('Could not connect: ' . mysql_error());
mysql_select_db('SCORES') or die('Could not select database');
$x=140;
$_GET["$x"];
$query = "SELECT ID,NAME,SCORE FROM SCORES WHERE ID=$x";

$result = mysql_query($query) or die('Query failed: ' . mysql_error());

$num_results = mysql_num_rows($result);

for($i = 0; $i < $num_results; $i++)
{
$row = mysql_fetch_array($result);
echo $row['ID'] . "\t" . $row['NAME'] . "\t" . $row['SCORE'] . "\n";
}


?>

обратите внимание на $_GET["$x"]; если она определена $x=140; то выводит поле с ID=140; но через юнити когда я отсылаю
Синтаксис:
Используется javascript
var highscore_url=highscoreUrl1+"&x"+140;
    hs_get = WWW(highscore_url);
    yield hs_get;
 

то ничего не происходит,выводится только по запросу php.
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

Re: Как переслать переменную на сайт сервера?

Сообщение Hash 26 мар 2012, 12:28

Вы не передаёте значение в скрипт. И юнити используется POST а не GET

Синтаксис:
Используется csharp
var form = new WWWForm();
    form.AddField("frameCount", Time.frameCount.ToString());                        -- передаём поле в форму
    form.AddBinaryData("fileUpload", bytes, "screenShot.png", "image/png");    -- передаём поле в форму

    var w = WWW(screenShotURL, form);                                                        -- вызываем скрипт и передаём в него форму
    yield return w;
 


Синтаксис:
Используется javascript
php:
$frameCount = mysql_real_escape_string($_POST['frameCount'], $db);               -- так принимаем переменную
 
Hash
UNIт
 
Сообщения: 61
Зарегистрирован: 06 апр 2011, 09:24

Re: Как переслать переменную на сайт сервера?

Сообщение Sergasteam 26 мар 2012, 22:04

вот оно что? спасибо огромное!!!! вы выручили меня)
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

Re: Как переслать переменную на сайт сервера?

Сообщение Sergasteam 26 мар 2012, 22:20

но могли бы вы подсказать еще такую вещь? как сделать, чтобы опять использовав эту систему получения очков через сервер,я мог получить имена всех пользователей в строку(это я знаю как), затем в строке со всеми именами(там через пробел разделяются), разрезать по кусочкам каждое имя,и присвоить это имя каждой кнопке?
или это гемор? простите за выражение.
Просто я создал 9 кнопок из полученного значения на сервере подсчетом количества записей,а вот как теперь присвоить каждой кнопке имя я не знаю,когда получаю список очков то у меня выводится в таком виде причем это для одной строковой переменной str:
1...имя...1234234
2...имя...1231231
3...имя...5465464
а str выглядит в редакторе так: 1...имя...1234234 2...имя...1231231 3...имя...5465464
есть идея,например отрезать str до 1...имя...1234234 присвоить это имя кнопке 1.
потом опять обратиться к серверу получить все имена и отрезать все что до и после 2...имя...1231231 и так далее.
Но ведь будет нагрузка на инет,очень сильная+ процедура в оперативке не хило занимать будет.
Подскажите кто может пожалуйста.
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

Re: Как переслать переменную на сайт сервера?

Сообщение Hash 26 мар 2012, 23:01

Я вижу это немного по другому.
Получаете все данные и если пишите на шарпе, то метод Split делит строку по определённым параметрам.
Т.е. в php файле когда пишите echo делите данные например точкой - echo mas[i].'.';.

В Юнити вызывается метод Split (из библиотеки c#) и получаете массив строк. И кнопке присваиваете элемент массива.
Hash
UNIт
 
Сообщения: 61
Зарегистрирован: 06 апр 2011, 09:24

Re: Как переслать переменную на сайт сервера?

Сообщение Sergasteam 27 мар 2012, 07:28

не,я пишу,на java, там в джаве тоже помоему был такой метод. А есть разница этого метода для двух Я\П?
А как тогда будет выглядеть условие получения имен с сервера,отрезания строки и запись в массив?
я представляю,но программно я не знаю как реализовать? особенно запись в массив каждого имени,помогите пожалуйста.
поидее должно быть так:
Синтаксис:
Используется javascript
var mas=new Arr();
for (i=0;i<str.Length;i++){
mas[i]=str[i];
if (GUI.Button(Rect(10,10,100,(10+i)*40),str[i])){}
}

я думаю что я здесь накрутил,приблизительное понимание,но я скорее всего чего то не понял.
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

Re: Как переслать переменную на сайт сервера?

Сообщение Hash 27 мар 2012, 09:10

http://msdn.microsoft.com/ru-ru/library ... 6a(v=vs.90).aspx

Почитайте доки, там всё объясняется и есть пример на Java. Этот метод сам делит строку на массив по определённому параметру, например "\".
Hash
UNIт
 
Сообщения: 61
Зарегистрирован: 06 апр 2011, 09:24

Re: Как переслать переменную на сайт сервера?

Сообщение Sergasteam 30 мар 2012, 15:17

Большое спасибо Hash все получилось с кнопочками.Вот только теперь еще один вопрос,полазил по форуму насчет patch/updater game, как тут предлагали скачивать проги для создания патчеров, но это оказалось чтобы делать кряки,отсюда я решил использовать AssetBundle. Создал сцену,запаковал ее со всеми параметрами физики,графики,камер,управления и т.д. Думал что все нормально загрузится с сервера, но не тут то было,из дока я вставил код в С# скрипт:
Синтаксис:
Используется csharp
IEnumerator Start () {
    // Start a download of the given URL
    WWW www = WWW.LoadFromCacheOrDownload (url, 1);

    // Wait for download to complete
    yield return www;

    // Load and retrieve the AssetBundle
    AssetBundle bundle = www.assetBundle;

    // Load the GameObject
    GameObject go = bundle.Load("myGameObject", typeof(GameObject)) as GameObject;

    // Instantiate the GameObject
    Instantiate(go);
}
 

запускаю игру не загружается бандл,т.е. не строится сцена,весит 50мб,тут я не пойму,загружается этот бандл вообще,можно ли как то отследить цифрами сколько загрузилось?? т.к. коннект к серверу есть,т.е. я хочу как бы сейчас для теста загрузить бандл со своего же компьютера,только перенести с другой папки в свою через свой же айпи. Как я понимаю, чтобы сделать апдейтер для игры мне нужно:
Скачать бандл с сервера в свою локальную папку на жесткий диск, в папку игры.
Далее при загрузке уровня уже загружать бандл на локальном диске.
Вот только даже на первом этапе не получается скачать готовое обновление. Как сделать апдэйт игры? тема все так же не раскрыта.
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

Re: Как переслать переменную на сайт сервера?

Сообщение DbIMok 30 мар 2012, 15:29

Sergasteam писал(а):можно ли как то отследить цифрами сколько загрузилось?

http://unity3d.com/support/documentatio ... gress.html
http://unity3d.com/support/documentatio ... sDone.html
Sergasteam писал(а):Скачать бандл с сервера в свою локальную папку на жесткий диск, в папку игры.
Далее при загрузке уровня уже загружать бандл на локальном диске.

это уже делает http://unity3d.com/support/documentatio ... nload.html
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как переслать переменную на сайт сервера?

Сообщение Sergasteam 30 мар 2012, 15:38

так ведь этож и использовано в коде который выше. но он не инстансирует объект.
а путь к моему объекту url="http://192.168.1.118/quadro.unity3d" я ж говорю коннект к серверу отличный. все сообщения о том что к серверу подключен есть, а вот этот бандл не грузится.
и такую фишку отслеживания загрузки я пробовал.
Синтаксис:
Используется javascript
var stream = new WWW (fileUrl);

    while (!stream.isDone)

    {

        progressImage.color = new Color(.5, .5, .5, stream.progress * .5);

        yield;

    }

    stream.LoadUnityWeb();
 


или объясните мне,куда загружается на локальный диск этот бандл?
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

Re: Как переслать переменную на сайт сервера?

Сообщение DbIMok 30 мар 2012, 16:05

загружается в \Local Settings\Application Data\Unity\Web Player\Cache
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Как переслать переменную на сайт сервера?

Сообщение Sergasteam 30 мар 2012, 16:12

так,хорошо,у меня получилось в реалтайме загрузить этот префаб из бандла, но когда я останавливаю игру то бандла больше нет, соответственно при запуске игры опять его надо скачивать. подскажите как оставить уже скаченный бандл-префаб и задействовать в движке? я залез в ту папку local settings нашел там несколько папок с загруженными ассетами,вот как теперь их перетащить оттуда или задействовать там из игры?
в папке этот бандл имеет название CustomAssetBundle-2288b851f3d954b49aab6eda90192fb8.
Последний раз редактировалось Sergasteam 30 мар 2012, 16:55, всего редактировалось 2 раз(а).
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

Re: Как переслать переменную на сайт сервера?

Сообщение Sergasteam 30 мар 2012, 16:47

а все таки нет варианта типа проверка файлов в папке,и если размер какого либо файла был изменен,то загрузить заново этот же файл только новую версию?
Sergasteam
UNIт
 
Сообщения: 68
Зарегистрирован: 16 янв 2011, 00:04

Re: Как переслать переменную на сайт сервера?

Сообщение DbIMok 30 мар 2012, 17:05

Sergasteam писал(а): как теперь их перетащить оттуда или задействовать там из игры?

это должно происходить автоматически. ничего специально делать не надо.
Sergasteam писал(а):проверка файлов в папке,и если размер какого либо файла был изменен,то загрузить заново

нет проблем, проверяйте, загружайте.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10