유니티 게임에 로그인 기능을 구현할 때, Firebase 같은 서비스를 이용할 수도 있지만 직접 PHP 서버를 만들어 데이터를 처리하는 방법도 있습니다. 이 방식은 백엔드 로직을 직접 제어할 수 있다는 장점이 있습니다.
아래에서는 유니티에서 입력받은 아이디와 비밀번호를 PHP 서버로 보내고, 서버의 응답에 따라 로그인 성공/실패를 처리하는 방법을 단계별로 설명합니다.
1. PHP 서버 스크립트 작성
먼저, 유니티 클라이언트의 요청을 받아 로그인 유효성을 검증하고 응답을 보낼 PHP 스크립트를 작성해야 합니다. 이 스크립트는 서버에 업로드되어야 합니다.
login.php
파일
PHP
<?php
header('Content-Type: application/json');
// POST 요청으로 받은 데이터가 있는지 확인
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
// 실제로는 데이터베이스에서 사용자 정보를 조회하는 로직이 들어갑니다.
// 여기서는 간단한 테스트를 위해 하드코딩된 정보를 사용합니다.
$valid_username = 'testuser';
$valid_password = 'password123';
// 아이디와 비밀번호 일치 여부 확인
if ($username === $valid_username && $password === $valid_password) {
$response = [
'status' => 'success',
'message' => '로그인 성공!'
];
} else {
$response = [
'status' => 'fail',
'message' => '아이디 또는 비밀번호가 올바르지 않습니다.'
];
}
} else {
$response = [
'status' => 'fail',
'message' => '잘못된 요청입니다.'
];
}
echo json_encode($response);
?>
이 스크립트는 username
과 password
를 받아 하드코딩된 값과 비교합니다. 결과에 따라 status
와 message
를 담은 JSON 형식의 응답을 반환합니다.
2. 유니티 클라이언트 스크립트 작성
이제 유니티에서 PHP 서버로 데이터를 보내고 응답을 받는 C# 스크립트를 작성할 차례입니다.
C#
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using System.Collections;
using TMPro;
public class LoginManager : MonoBehaviour
{
public TMP_InputField usernameInput;
public TMP_InputField passwordInput;
public Button loginButton;
public TextMeshProUGUI statusText;
// PHP 서버 URL. 반드시 실제 서버 주소로 변경해야 합니다.
public string serverUrl = "http://your-server.com/login.php";
void Start()
{
// 로그인 버튼에 클릭 이벤트 리스너 추가
loginButton.onClick.AddListener(OnLoginButtonClicked);
}
void OnLoginButtonClicked()
{
string username = usernameInput.text;
string password = passwordInput.text;
statusText.text = "로그인 요청 중...";
// 코루틴으로 로그인 요청 시작
StartCoroutine(ProcessLogin(username, password));
}
IEnumerator ProcessLogin(string username, string password)
{
// 서버에 보낼 데이터를 담을 WWWForm 생성
WWWForm form = new WWWForm();
form.AddField("username", username);
form.AddField("password", password);
// UnityWebRequest를 이용해 POST 요청 생성
UnityWebRequest request = UnityWebRequest.Post(serverUrl, form);
// 요청 전송
yield return request.SendWebRequest();
// 에러 확인
if (request.result != UnityWebRequest.Result.Success)
{
Debug.LogError("서버 연결 실패: " + request.error);
statusText.text = "서버 연결 실패";
}
else
{
// 서버 응답을 JSON 문자열로 받음
string responseText = request.downloadHandler.text;
Debug.Log("서버 응답: " + responseText);
// JSON 응답 파싱
LoginResponse response = JsonUtility.FromJson<LoginResponse>(responseText);
if (response.status == "success")
{
statusText.text = "로그인 성공!";
// 다음 씬으로 이동하거나 게임 로직 실행
// SceneManager.LoadScene("MainGameScene");
}
else
{
statusText.text = response.message;
}
}
}
// 서버 응답 JSON을 파싱하기 위한 클래스
[System.Serializable]
public class LoginResponse
{
public string status;
public string message;
}
}
이 스크립트는 **WWWForm
**을 이용해 아이디와 비밀번호 데이터를 POST 방식으로 서버에 전송합니다. 서버로부터 JSON 응답을 받으면 JsonUtility
를 사용해 C# 클래스로 변환한 뒤, status
값에 따라 로그인 성공/실패 여부를 판단합니다.
3. 유니티에서 스크립트와 UI 연결
- 오브젝트 생성 및 스크립트 부착: 씬에 빈 오브젝트를 만들고
LoginManager.cs
스크립트를 부착합니다. - UI 요소 연결:
LoginManager
오브젝트의 Inspector 창에서Username Input
,Password Input
,Login Button
,Status Text
필드에 해당 UI 오브젝트들을 드래그하여 연결합니다. - 서버 URL 설정: Inspector 창의
Server Url
필드에 PHP 파일이 위치한 실제 서버 주소를 정확하게 입력합니다.
이 방법을 통해 PHP 서버와 통신하는 기본적인 로그인 시스템을 구축할 수 있습니다. 중요한 보안 이슈로, 실제 서비스에서는 HTTPS를 사용하여 모든 통신을 암호화해야 합니다.