Saltar al contenido

Cómo conectarse a la base de datos desde Unity

Nuestros mejores programadores agotaron sus provisiones de café, por su búsqueda noche y día por la solución, hasta que Talía encontró la solución en Beanstalk y hoy la comparte aquí.

Solución:

Ignore cualquier riesgo de seguridad con este enfoque

No lo hagas asi. No importa si la seguridad vendrá antes o después. Terminará de reescribir todo el código porque el contraseña está codificado en su aplicación que se puede descompilar y recuperar fácilmente. Realice la conexión de la manera correcta ahora para que no tenga que volver a escribir toda la aplicación.

Ejecute el comando de su base de datos en su servidor con php, perl o cualquier idioma con el que se sienta cómodo, pero esto debe hacerse en el servidor.

Desde Unity, usa el WWW o UnityWebRequest class para comunicarse con ese script y luego, podrá enviar y recibir información de Unity al servidor. Hay muchos ejemplos por ahí. Incluso con esto, todavía necesita implementar su propia seguridad, pero esto es mucho mejor que lo que tiene ahora.

También puede recibir datos múltiples con json.

A continuación se muestra un ejemplo completo de este wiki de Unity. Muestra cómo interactuar con una base de datos en Unity usando php en el lado del servidor y Unity + C # en el lado del cliente.

Lado del servidor:

Agregar puntaje con PDO:

An error has ocurred.
', $e->getMessage() ,'

';

$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 '

An error has ocurred.

', $e->getMessage() ,'

';

?>

Recuperar puntuación con PDO:

An error has occurred.
', $e->getMessage() ,'

';

$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";

?>

Habilite la política de dominio cruzado en el servidor:

Este archivo debe llamarse “crossdomain.xml” y colocarse en la raíz de su servidor web. Unity requiere que los sitios web a los que desea acceder a través de una solicitud WWW tengan una política de dominio cruzado.






Lado cliente / unidad:

El código de cliente de Unity se conecta al servidor, interactúa con PDO y agrega o recupera puntaje según la función que se llame. Este código de cliente está ligeramente modificado para compilarse con la última versión de 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');

Este es solo un ejemplo de cómo hacer esto correctamente. Si necesita implementar la función de sesión y preocuparse por la seguridad, consulte la OAuth 2.0 protocolo. Debería haber bibliotecas existentes que ayudarán a comenzar con el OAuth protocolo.

Recuerda dar visibilidad a esta reseña si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *