Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да се свържете с база данни от Unity

Моля, пренебрегвайте всички рискове за сигурността с този подход

Не го правете така . Няма значение дали сигурността ще дойде преди или след. Ще приключите с пренаписването на целия код, защото паролата е твърдо кодиран във вашето приложение, който може да бъде декомпилиран и извлечен лесно . Направете връзката по правилния начин сега, за да не се налага да пишете отново цялото приложение.

Изпълнете командата на вашата база данни на вашия сървър с php, perl или какъвто и да е език, който ви харесва, но това трябва да стане на сървъра.

От Unity използвайте WWW или UnityWebRequest клас, за да комуникира с този скрипт и след това ще можете да изпращате и получавате информация от Unity до сървъра. Има много примери. Дори и с това, все още трябва да внедрите собствената си сигурност, но това е много по-добре от това, което имате сега.

Можете също да получавате множество данни с json.

По-долу е пълен пример от това уики Unity. Показва как да взаимодействате с база данни в Unity, като използвате php от страна на сървъра и Unity + C# от страна на клиента.

Сървърна страна :

Добавяне на резултат със ЗНП :

<?php
        // Configuration
        $hostname = 'localhot';
        $username = 'yourusername';
        $password = 'yourpassword';
        $database = 'yourdatabase';

        $secretKey = "mySecretKey"; // Change this value to match the value stored in the client javascript below 

        try {
            $dbh = new PDO('mysql:host='. $hostname .';dbname='. $database, $username, $password);
        } catch(PDOException $e) {
            echo '<h1>An error has ocurred.</h1><pre>', $e->getMessage() ,'</pre>';
        }

        $realHash = md5($_GET['name'] . $_GET['score'] . $secretKey); 
        if($realHash == $hash) { 
            $sth = $dbh->prepare('INSERT INTO scores VALUES (null, :name, :score)');
            try {
                $sth->execute($_GET);
            } catch(Exception $e) {
                echo '<h1>An error has ocurred.</h1><pre>', $e->getMessage() ,'</pre>';
            }
        } 
?>
 

Извличане на резултат със ЗНП :

<?php
    // Configuration
    $hostname = 'localhost';
    $username = 'yourusername';
    $password = 'yourpassword';
    $database = 'yourdatabase';

    try {
        $dbh = new PDO('mysql:host='. $hostname .';dbname='. $database, $username, $password);
    } catch(PDOException $e) {
        echo '<h1>An error has occurred.</h1><pre>', $e->getMessage() ,'</pre>';
    }

    $sth = $dbh->query('SELECT * FROM scores ORDER BY score DESC LIMIT 5');
    $sth->setFetchMode(PDO::FETCH_ASSOC);

    $result = $sth->fetchAll();

    if(count($result) > 0) {
        foreach($result as $r) {
            echo $r['name'], "\t", $r['score'], "\n";
        }
    }
?>
 

Активиране на правилата за кръстосани домейни на сървъра :

Този файл трябва да бъде наречен "crossdomain.xml" и да бъде поставен в корена на вашия уеб сървър. Unity изисква уебсайтовете, до които искате да получите достъп чрез WWW заявка, да имат правила за кръстосани домейни.

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
 

От страна на клиента/Unity :

Клиентският код от Unity се свързва със сървъра, взаимодейства с PDO и добавя или извлича резултат в зависимост от това коя функция е извикана. Този клиентски код е леко модифициран, за да се компилира с най-новата версия на Unity.

private string secretKey = "mySecretKey"; // Edit this value and make sure it's the same as the one stored on the server
public string addScoreURL = "http://localhost/unity_test/addscore.php?"; //be sure to add a ? to your url
public string highscoreURL = "http://localhost/unity_test/display.php";

//Text to display the result on
public Text statusText;

void Start()
{
    StartCoroutine(GetScores());
}

// remember to use StartCoroutine when calling this function!
IEnumerator PostScores(string name, int score)
{
    //This connects to a server side php script that will add the name and score to a MySQL DB.
    // Supply it with a string representing the players name and the players score.
    string hash = Md5Sum(name + score + secretKey);

    string post_url = addScoreURL + "name=" + WWW.EscapeURL(name) + "&score=" + score + "&hash=" + hash;

    // Post the URL to the site and create a download object to get the result.
    WWW hs_post = new WWW(post_url);
    yield return hs_post; // Wait until the download is done

    if (hs_post.error != null)
    {
        print("There was an error posting the high score: " + hs_post.error);
    }
}

// Get the scores from the MySQL DB to display in a GUIText.
// remember to use StartCoroutine when calling this function!
IEnumerator GetScores()
{
    statusText.text = "Loading Scores";
    WWW hs_get = new WWW(highscoreURL);
    yield return hs_get;

    if (hs_get.error != null)
    {
        print("There was an error getting the high score: " + hs_get.error);
    }
    else
    {
        statusText.text = hs_get.text; // this is a GUIText that will display the scores in game.
    }
}

public string Md5Sum(string strToEncrypt)
{
    System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding();
    byte[] bytes = ue.GetBytes(strToEncrypt);

    // encrypt bytes
    System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
    byte[] hashBytes = md5.ComputeHash(bytes);

    // Convert the encrypted bytes back to a string (base 16)
    string hashString = "";

    for (int i = 0; i < hashBytes.Length; i++)
    {
        hashString += System.Convert.ToString(hashBytes[i], 16).PadLeft(2, '0');
    }

    return hashString.PadLeft(32, '0');
}
 

Това е само пример за това как да направите това правилно. Ако трябва да внедрите функцията за сесия и се грижите за сигурността, разгледайте OAuth 2.0 протокол. Трябва да има съществуващи библиотеки, които ще ви помогнат да започнете с OAuth протокол.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CRUD работа с ASP.NET Core MVC, Entity Framework Core и SQL Server

  2. Разделете дял на две в SQL Server (T-SQL)

  3. Как да изтриете файлове в SQL Server 2019

  4. Как да намерите най-лошо представящите се заявки в SQL Server 2008?

  5. Как правилно да вмъкнете нов ред в nvarchar