Unity로 게임 개발을 하면 게임 클라이언트를 종료할 때 모든 데이터가 없어지기 때문에 데이터베이스에 저장해야 할 경우가 있다. 가장 대표적인 예로 유저 데이터가 있다. Unity로 클라이언트에 데이터베이스(MySQL)를 연결하여 정보를 저장하고, DB에서 정보를 가져오는 방법을 간단하게 알아보았다.
유니티에 MySQL을 연결하는 방법은 크게 두 가지가 있다.
From GPT
Connector 보다는 PHP를 사용하는 것이 더 낫다고 판단하여 PHP 스크립트로 구현하였다.
원래는 PHP 스크립트를 돌리기 위해 PHP와 Apache24와 MySQL을 따로 설치하여 설정해야하는 아주 귀찮은 일을 해야하지만 이를 한번에 통합하여 설치하고 자동으로 설정까지 해주는 프로그램이 있는데 AutoSet이다. 이 프로그램 하나만 설치하면 Apache2.4, PHP7, MariaDB10을 동시에 설치하고 연동까지 시켜준다.
[Windows]AutoSet 설치 및 AutoSet 매니저 사용하기
AutoSet 설치 후 hospital 데이터베이스를 만들고 staff 테이블을 만들어 이름, 직원 ID 값을 저장한다.

이후 AutoSet10/public_html(웹 서버 홈 디렉토리)에 get_users.php 스크립트를 생성한다.
<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "hospital";
// 데이터베이스 연결
$conn = new mysqli($servername, $username, $password, $dbname);
// 연결 확인
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL 쿼리 실행
$sql = "SELECT id, name, number FROM staff";
$result = $conn->query($sql);
$users = array();
if ($result->num_rows > 0) {
// 결과를 배열로 저장
while($row = $result->fetch_assoc()) {
$users[] = $row;
}
}
// JSON 형식으로 결과 반환
echo json_encode($users, JSON_UNESCAPED_UNICODE);
$conn->close();
?>
유니티에도 연결하는 코드를 작성한다.
using UnityEngine;
using System.Text;
using MySql.Data.MySqlClient;
using UnityEngine.Networking;
using System.Collections;
using System.Collections.Generic;
[System.Serializable]
public class User
{
public int id;
public string name;
public string number;
}
public class MySQLConnector : MonoBehaviour
{
private string url = "http://localhost/get_users.php";
void Start()
{
StartCoroutine(GetUsersData());
}
IEnumerator GetUsersData()
{
UnityWebRequest www = UnityWebRequest.Get(url);
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log(www.error);
}
else
{
byte[] result = www.downloadHandler.data;
string jsonResponse = Encoding.UTF8.GetString(result);
Debug.Log("JSON Response: " + jsonResponse); // JSON 응답 확인
User[] users = JsonHelper.FromJson<User>(jsonResponse);
foreach (User user in users)
{
Debug.Log("ID: " + user.id + ", Name: " + user.name + ", Number: " + user.number);
}
}
}
}
// JsonHelper class to handle array responses
public static class JsonHelper
{
public static T[] FromJson<T>(string json)
{
string newJson = "{ \"array\": " + json + "}";
Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(newJson);
return wrapper.array;
}
[System.Serializable]
private class Wrapper<T>
{
public T[] array;
}
}

데이터베이스 연결에 성공하였다.