Всем доброго времени суток, в этом цикле статей я расскажу как создать базу данных на бесплатном интернет хостинге, и получить доступ к ней из вашей игры, сделанной на Unity3d.
Допустим вы создали онлайн игру и перед вами встала задача добавить возможность сохранения набранных очков пользователем, с возможностью вывода этих очков в HiScore. Для этого вам необходимо хранить эти очки на сервере с возможностью постоянного доступа к нему.
Я использовал бесплатный хостингwww.byethost.com. И так регестрируемся на www.byethost.com, на почту вам должно прийти письмо с логином и паролем. Авторизуемся на сайте, потом заходим в панель управления. Выбираем MySQL Database:
В появившемся окне в поле вводим имя вашей базы данных, и жмем Create Database. База данных создана теперь заходим в панель управления базой данных, жмем кнопку Admin. У вас должно появиться следующее окошко:
Создадим новую таблицу в которой будем хранить имя пользователя и набранные очки. В поле «Имя» введите название таблицы, например «scores», в поле «Количество столбцов» введите «2», и нажмите «Ок». Появится окно где нужно заполнить названия столбцов и тип хранимых данных. В первом столбце будем хранить имя пользователя: поле - name, тип - varchar, длинна - 20. Второй столбец: поле – score, тип int. Нажимае «Сохранить», таблица создана. Теперь выберите созданную таблицу, у вас появится окно со структурой таблицы, и внизу будет надпись «Индекс не определен». Напротив столбца «Name» нажмите «ещё» и выберите "добавить индекс".
База данных создана, теперь необходимо осуществить доступ к ней. Так как на сервере порт 3306 закрыт для внешнего доступа, по которому осуществляется связь с MySQL, мы не можем удаленно, из нашего приложения осуществлять доступ к базе данных. По этому мы создадим php скрипт в котором будет осуществляться доступ к нашей БД, чтение и запись данных и расположим его на сервере, а из приложения уже будем получать данные через этот скрипт.
И так создайте следующий php-скрипт:
?PHP // Connect to Database $link = mysql_connect( "hostname", "username", "password" ) or die( mysql_error() ); mysql_select_db( "databasename" ) or die( mysql_error() ); // Get Data $name = $_POST['name']; //Get name from Unity $score = $_POST['score']; //Get score from Unity $action = $_POST[ 'action' ]; //Get request action from Unity $unityHash = $_POST[ 'hash' ]; //Get hash key from Unity //Секретный ключ для шифрования данных при передаче $secretKey="BRIGHTWORLDGAMES"; $phpHash = md5($name."-".$score."-".$secretKey); switch ( $action ) { case "GetScore": GetScores(); break; case "PostScore": if( $phpHash == $unityHash ) { PostScore(); } break; default: GetScores(); break; } //////////////////////////////////////////////////////////////////////////////////////// function PostScore() { $score = $_POST[ 'score' ]; //score pass from Unity $name = $_POST[ 'name' ]; //name pass from Unity //scores = имя вашей БД //name = Первый столбец //score = второй столбец $query = "INSERT INTO scores ( name, score ) VALUES ( '" . $name . "', '" . $score . "')"; mysql_query( $query ) or die( mysql_error() ); } //////////////////////////////////////////////////////////////////////////////////////// function GetScores() { if( $_POST[ 'size' ] != "" ) { $size = $_POST[ 'size' ]; } else { $size = 10; } $query = "SELECT * FROM scores ORDER BY score DESC LIMIT " . $size; $results = mysql_query( $query ) or die( mysql_error() ); //Return XML String to Unity echo "\n"; echo "\n"; if( mysql_num_rows( $results ) > 0 ) { while( $line = mysql_fetch_array( $results ) ) { echo " \n"; } //////////////////////////////////////////////////////////////////////////////////////// // Close mySQL Connection mysql_close($link); ?>\n"; } } else { echo "No entries yet."; } echo "
Hostname вы можете посмотреть на панели слева, имя пользователя и пароль к БД должны были прийти вам на почту. Назовите данный скрипт HiScore, и залейте его на сервер через ftp (адрес ftp также можно увидеть на панели слева), в папку “htdocs”. На этом работа с сервером закончена, и можно переходить к клиентской части приложения.
не работает
ОтветитьУдалить