Всем доброго времени суток, в этом цикле статей я расскажу как создать базу данных на бесплатном интернет хостинге, и получить доступ к ней из вашей игры, сделанной на 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";
}
}
else {
echo "No entries yet.";
}
echo " \n";
}
////////////////////////////////////////////////////////////////////////////////////////
// Close mySQL Connection
mysql_close($link);
?>
Hostname вы можете посмотреть на панели слева, имя пользователя и пароль к БД должны были прийти вам на почту. Назовите данный скрипт HiScore, и залейте его на сервер через ftp (адрес ftp также можно увидеть на панели слева), в папку “htdocs”. На этом работа с сервером закончена, и можно переходить к клиентской части приложения.
не работает
ОтветитьУдалить