Получение данных в игру из базы данных

Сеть в Unity3D

Получение данных в игру из базы данных

Сообщение Disord 08 янв 2012, 16:18

Здарвствуйте! По этому туториалу:
http://blogs.unity3d.ru/2009/09/%D1%80%D0%B5%D0%BA%D0%BE%D1%80%D0%B4%D1%8B-%D1%82%D0%B2%D0%BE%D0%B5%D0%B9-%D0%B8%D0%B3%D1%80%D1%8B-%D0%BD%D0%B0-%D1%82%D0%B2%D0%BE%D0%B5%D0%BC-%D1%81%D0%B0/
Пробовал подключиться к созданной мною MySQL базе и внести в неё значения. Всё получилось - далее сам разобрался, как обновлять и удалять эти значения. Теперь возник вопрос по получению этих данных в юнити. В этом примере мы считываем информацию из страницы, на которую все выводится. Но этот способ для меня не подходит. Например, необходимо сделать форму входа в игру. Ввести логин и пароль, и, если они верны - то игра впустит. Передать-то значения я могу, и сверить могу. Но как мне понять, что эти данные верны? Как вернуть отчет в юнити? Да и вообще - как можно получить указанное значение указанного столбца для указанного игрока? В темах на этом форуме видел ссылки на сайт MySQL и коннектор какой-то, но, если честно, попросту не разобрался - что и куда...
И ещё вопрос - как защититься от многоразовых регистраций? Запоминать Ip игрока, а потом сверять? Если в БД есть такой, то регистрироваться нельзя?
Disord
UNец
 
Сообщения: 32
Зарегистрирован: 16 дек 2011, 06:28

Re: Получение данных в игру из базы данных

Сообщение Golandez 08 янв 2012, 17:31

При входе пользователя ищете в БД по имени пароль при регистрации и сравниваете с введенным пользователем(Чтобы узнать номер строки или добавляете колонку с нумерацией или перебором определяете номер элемента в столбце и в столбце с паролями находите элемент с аналогичным индексом ). Для предотвращения множественных регистраций проверяете на наличие такого имени и такого email.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Получение данных в игру из базы данных

Сообщение Woolf 08 янв 2012, 18:22

я как-то не понял немного что вас интересует )
Если вам надо только логин/пароль и таблица рекордов, то это можно сделать при помощи удалённого сервера с ПХП и базой данных.

Технология такая - клиент посылает http запрос на пхп с какими либо данными, в ответ получает другие данные. В самих скриптах реализованы запросы к базе данных.
В минимальном варианте вам понадобится 4 скрипта:

1) Скрипт регистрации - клиент передаёт логин, пароль. Скрипт отвечает что, либо регистрация успешна, либо не успешна (если такой логин уже существует)
2) Скрипт авторизации - клиент передаёт логин, пароль , скрипт отвечает, что авторизация либо успешна, либо не успешна.
3) Запись игрового рекорда/игровых очков - клиент передаёт данные по достижению на скрипт, скрипт записывает достижение
4) Запрос на таблицу рекордов - клиент спрашивает, скрипт отвечает.

Для реализации такой системы вам необходимо хотя бы
базовые знания PHP, http://php.net/manual/ru/index.php
MySQL+PHP http://phpfaq.ru/mysql
и умение отправлять запросы на пхп скрипт из юниклиента (http://2lx.ru/2009/10/otpravka-get-i-post-zaprosov-v-c/)
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Получение данных в игру из базы данных

Сообщение gnoblin 08 янв 2012, 18:31

На вики есть пример работы с хайскорами.
Для http запросов лучше использовать встроенный юнитевский функционал - класс WWW.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Получение данных в игру из базы данных

Сообщение Disord 09 янв 2012, 05:43

Woolf писал(а):Скрипт отвечает что, либо регистрация успешна, либо не успешна

Вот я как раз это и спрашивал :) К примеру, вот скрипт на ПХП для добавления значений в базу (секретный код, имя базы, пароль и ник заменил):
Синтаксис:
Используется php
<?php
        $db = mysql_connect("localhost", "user", "password") or die('Could not connect: ' . mysql_error());
        mysql_select_db('database') or die('Could not select database');
        $name = mysql_real_escape_string($_GET['name'], $db);
        $password = mysql_real_escape_string($_GET['password'], $db);
        $kills = $_GET['kills'];
        $deaths = $_GET['deaths'];
        $hash = $_GET['hash'];
        $secretKey = "secretkey";
        $real_hash = md5($name . $password . $kills . $deaths . $secretKey);
        if ($real_hash == $hash) {
                $sql = "SELECT id FROM shih WHERE name = '$name';";
                $result = mysql_query($sql);
                if (mysql_num_rows($result) == 0) {
                        $query = "INSERT INTO shih VALUES(NULL, '$name', '$password', '$kills', '$deaths');";
                        $result = mysql_query($query) or die('Query failed: ' . mysql_error());
                }
        }
?>

У себя в Unity я просто вызываю следующую функцию, передавая в нее ник, пароль, количество убийств и смертей (они = 0):
Синтаксис:
Используется csharp
        public IEnumerator addval(string name, string password, int kills, int deaths) {
                string hash = Md5Sum(name + password + kills + deaths + secretKey);
                string values = addvalUrl + "?name=" + http://WWW.EscapeURL(name) + "&password=" + http://WWW.EscapeURL(password) + "&kills=" + kills + "&deaths=" + deaths + "&hash=" + hash;
                hs_post = new WWW(values);
                yield return hs_post;
                Debug.Log("values: " + values);
                if (hs_post.error != null) Debug.Log("There was an error posting the value: " + hs_post.error);
        }

Как узнать, что регистрация успешна? Просто сравнить данные, и если они валидны, то вывести на страничку текст: successfull, в обратном случае: failed. Далее в Unity в скрипте проверять текст на этой странице, и если он соответствует ожиданиям, то делать действия при успешной регистрации, если нет - то при неуспешной. Также и при логине. Верно? А просто получать данные - то отправлять в ПХП запрос - нужную величину, а там просто выводить на страницу нужную, и в Юньке читать?
Спасибо всем ответившим до поста и заранее спасибо ответившим после :)
Disord
UNец
 
Сообщения: 32
Зарегистрирован: 16 дек 2011, 06:28

Re: Получение данных в игру из базы данных

Сообщение Disord 09 янв 2012, 14:55

Вроде бы такой метод, как выше я говорил, у меня работает. Всем огромное спасибо за советы, если таковых больше не будет или по методу получения результата не будет дополнений, то тему можно закрывать :)
Disord
UNец
 
Сообщения: 32
Зарегистрирован: 16 дек 2011, 06:28

Re: Получение данных в игру из базы данных

Сообщение Woolf 10 янв 2012, 13:34

Disord писал(а):
Woolf писал(а):Скрипт отвечает что, либо регистрация успешна, либо не успешна

Вот я как раз это и спрашивал :) К примеру, вот скрипт на ПХП для добавления значений в базу (секретный код, имя базы, пароль и ник заменил):
Синтаксис:
Используется php
<?php
        $db = mysql_connect("localhost", "user", "password") or die('Could not connect: ' . mysql_error());
        mysql_select_db('database') or die('Could not select database');
        $name = mysql_real_escape_string($_GET['name'], $db);
        $password = mysql_real_escape_string($_GET['password'], $db);
        $kills = $_GET['kills'];
        $deaths = $_GET['deaths'];
        $hash = $_GET['hash'];
        $secretKey = "secretkey";
        $real_hash = md5($name . $password . $kills . $deaths . $secretKey);
        if ($real_hash == $hash) {
                $sql = "SELECT id FROM shih WHERE name = '$name';";
                $result = mysql_query($sql);
                if (mysql_num_rows($result) == 0) {
                        $query = "INSERT INTO shih VALUES(NULL, '$name', '$password', '$kills', '$deaths');";
                        $result = mysql_query($query) or die('Query failed: ' . mysql_error());
                }
        }
?>

У себя в Unity я просто вызываю следующую функцию, передавая в нее ник, пароль, количество убийств и смертей (они = 0):
Синтаксис:
Используется csharp
        public IEnumerator addval(string name, string password, int kills, int deaths) {
                string hash = Md5Sum(name + password + kills + deaths + secretKey);
                string values = addvalUrl + "?name=" + http://WWW.EscapeURL(name) + "&password=" + http://WWW.EscapeURL(password) + "&kills=" + kills + "&deaths=" + deaths + "&hash=" + hash;
                hs_post = new WWW(values);
                yield return hs_post;
                Debug.Log("values: " + values);
                if (hs_post.error != null) Debug.Log("There was an error posting the value: " + hs_post.error);
        }

Как узнать, что регистрация успешна? Просто сравнить данные, и если они валидны, то вывести на страничку текст: successfull, в обратном случае: failed. Далее в Unity в скрипте проверять текст на этой странице, и если он соответствует ожиданиям, то делать действия при успешной регистрации, если нет - то при неуспешной. Также и при логине. Верно? А просто получать данные - то отправлять в ПХП запрос - нужную величину, а там просто выводить на страницу нужную, и в Юньке читать?
Спасибо всем ответившим до поста и заранее спасибо ответившим после :)



как узнать, что регистрация успешна


Так у вас в скрипте уже и есть небольшие намётки регистрации

Синтаксис:
  1. $sql = "SELECT id FROM shih WHERE name = '$name';"; 
  2. $result = mysql_query($sql); 
  3. if (mysql_num_rows($result) == 0) { 
  4. $query = "INSERT INTO shih VALUES(NULL, '$name', '$password', '$kills', '$deaths');"; 
  5. $result = mysql_query($query) or die('Query failed: ' . mysql_error()); 
  6.  
  7. echo "reg=true"; 
  8. } else { 
  9. echo "reg=false"; 


потом из WWW в юнити берёте ответ (не помню как, посмотрите в доках) и смотрите, регистрация успешна или нет ) Если там было reg=true, значит записался игрок, если reg=false - значит такой игрок уже был.

PS Сам пхп скрипт и юнискрипт ужасно кривы ) Откуда вы их выкопали? Я бы за такие скрипты руки бы отрывал..
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59


Вернуться в Сеть

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

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