English French German Spain Italian Dutch Russian Portuguese Japanese Korean Arabic Chinese Simplified

20 февр. 2012 г.

Unity3d. Сохранение результата в базу данных расположенную на сервере. Часть первая - сервер.

     Всем доброго времени суток, в этом цикле статей я расскажу как создать базу данных на бесплатном интернет хостинге, и получить доступ к ней из вашей игры, сделанной на 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”. На этом работа с сервером закончена, и можно переходить к клиентской части приложения.

1 комментарий: