유니티에서 PHP를 사용하여 서버에 데이터를 저장하려면 클라이언트(유니티)와 서버(PHP) 양쪽에 코드를 작성해야 합니다. 유니티 스크립트는 데이터를 서버로 전송하는 역할을 하고, PHP 스크립트는 전송받은 데이터를 파일로 저장하는 역할을 맡습니다.
1. 유니티 클라이언트 스크립트 (C#)
이 스크립트는 유니티에서 실행되며, 웹 요청을 통해 데이터를 서버의 PHP 파일로 보냅니다. UnityWebRequest
는 최신 유니티에서 웹 통신에 권장되는 방식입니다.
C#
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class DataSaver : MonoBehaviour
{
// PHP 스크립트가 위치한 서버의 URL
public string serverURL = "http://yourserver.com/save_data.php";
// 저장할 데이터
private string myData = "게임 점수: 1200, 플레이어: John";
void Start()
{
// Start() 함수에서 바로 데이터 저장 코루틴을 시작합니다.
StartCoroutine(SendPlayerData(myData));
}
IEnumerator SendPlayerData(string dataToSend)
{
// 폼(Form) 데이터를 생성하여 전송할 데이터를 담습니다.
WWWForm form = new WWWForm();
form.AddField("playerData", dataToSend);
// POST 방식으로 웹 요청을 보냅니다.
using (UnityWebRequest www = UnityWebRequest.Post(serverURL, form))
{
// 요청이 완료될 때까지 기다립니다.
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
// 요청 실패 시 오류 메시지를 출력합니다.
Debug.LogError("웹 요청 실패: " + www.error);
}
else
{
// 요청 성공 시 서버 응답을 출력합니다.
Debug.Log("서버 응답: " + www.downloadHandler.text);
}
}
}
}
serverURL
: PHP 파일이 업로드된 서버의 주소를 입력합니다. 실제 주소로 변경해야 합니다.WWWForm
: 웹 요청 시 POST 방식으로 데이터를 보낼 때 사용하는 형식입니다.AddField()
함수로 “playerData”라는 이름의 필드에 저장할 문자열 데이터를 담습니다.UnityWebRequest.Post()
: 지정된 URL로WWWForm
에 담긴 데이터를 POST 방식으로 전송하는 역할을 합니다.IEnumerator SendPlayerData
: 웹 요청은 비동기적으로 처리되므로, 코루틴(Coroutine)을 사용하여 요청이 완료될 때까지 기다립니다.
2. 서버 측 PHP 스크립트 (save_data.php)
이 PHP 파일은 웹 서버에 위치하며, 유니티에서 보낸 데이터를 받아 파일로 저장하는 역할을 합니다.
PHP
<?php
// 유니티에서 보낸 POST 데이터를 받습니다.
// 'playerData' 필드에 담긴 데이터를 가져옵니다.
$data = $_POST['playerData'];
// 파일로 저장할 이름과 경로를 지정합니다.
// 보안을 위해 파일명을 직접 지정하는 것이 안전합니다.
$file_path = 'player_data.txt';
if ($data) {
// 파일에 데이터를 추가(append) 모드로 씁니다.
// 기존 내용 뒤에 새로운 내용을 추가하고, 줄바꿈 문자를 삽입합니다.
$result = file_put_contents($file_path, $data . "\n", FILE_APPEND | LOCK_EX);
if ($result !== false) {
// 파일 쓰기 성공 시 유니티로 성공 메시지를 보냅니다.
echo "데이터가 성공적으로 저장되었습니다.";
} else {
// 파일 쓰기 실패 시 에러 메시지를 보냅니다.
echo "파일 저장에 실패했습니다.";
}
} else {
// 데이터가 전송되지 않았을 경우 에러 메시지를 보냅니다.
echo "데이터가 없습니다.";
}
?>
$_POST['playerData']
: 유니티에서WWWForm
의AddField("playerData", ...)
로 보낸 데이터를 받습니다.$file_path = 'player_data.txt';
: 서버에 저장할 파일의 이름을 지정합니다.file_put_contents()
: PHP에서 파일을 쓰고 관리하는 가장 간편한 함수입니다.$file_path
: 데이터를 저장할 파일 경로.$data . "\n"
: 저장할 데이터와 줄바꿈(\n
)을 추가합니다.FILE_APPEND
: 기존 파일 내용 뒤에 새로운 내용을 추가하도록 지정합니다.LOCK_EX
: 파일에 데이터를 쓸 때 다른 프로세스가 접근하지 못하도록 잠그는 역할을 해 데이터가 꼬이는 것을 방지합니다.
3. 스크립트 사용 방법
- PHP 스크립트 업로드: 작성한
save_data.php
파일을 웹 서버에 업로드합니다. - 유니티 스크립트 작성: 유니티 프로젝트에
DataSaver.cs
파일을 생성하고 코드를 붙여 넣습니다. - URL 변경: 인스펙터 창에서
DataSaver
스크립트의serverURL
변수 값을 웹 서버의 실제save_data.php
경로로 변경합니다. - 실행: 유니티 에디터에서 게임을 실행하면,
Start()
함수가 자동으로 실행되어 데이터가 서버로 전송되고player_data.txt
파일에 저장됩니다.
이 방식을 통해 유니티와 웹 서버가 데이터를 주고받는 기본적인 시스템을 구축할 수 있습니다.