04. 대통합

시그니천·2024년 7월 23일

WEB SERVER

목록 보기
6/7
  • Save Data
  • Load Data

sudo su
cd ../../var/www/html
vi saveplayer.php


php

1) saveplayer.php

<?php

// 1. 서버 연결
$servername = "localhost";
$username = "phpmyadmin_user";
$password = "1234"
$dbname = "PLAYER_Database";

// Create Connection
$conn = new mysqli{$servername, $username, $password, $dbname};

// Check Connection
if($conn->connect_error){
	die("Connection failed : " .$conn->connect_error);
}

// 2. Json Data를 받고, 문자열 객체로 반환 ( UNITY -> PHP )
$player_jsondata = $_POST['player']; // 던져진 데이터를 받음
$playerdata = json_decode{$player_jsondata, true}; // 문자열을 Json으로 변환 (true는 배열로 받아온다는 뜻)

// 3. 데이터베이스에 데이터 저장 ( PHP -> MySQL )
// 1) 쿼리문 작성
$name = $playerdata['Name'];
$score = $playerdata['Score'];
$playersql = "REPLACE INTO Player_Data (Name,Score) VALUES ('$name','$score');

// 2) 쿼리문 실행
$conn->query($playersql);

?>
  • 중복된 값을 원하지 않을때는 고유키를 사용함
  • 고유값을 삽입할땐 REPLACE

2) loadplayer.php

<?php

// 1. 서버 연결
$servername = "localhost";
$username = "phpmyadmin_user";
$password = "1234"
$dbname = "PLAYER_Database";
?>

// Create Connection
$conn = new mysqli{$servername, $username, $password, $dbname};

// Check Connection
if($conn->connect_error){
	die("Connection failed : " .$conn->connect_error);
}

// 2. SQL에 정보 요청
// 1) 쿼리문 작성
$playername = $_POST['Name']; // 유니티에서 어떤 플레이어의 데이터를 가지고 올지
$playersql = "SELECT Score FROM Player_Data WHERE Name = '$playername'";

// 2) 쿼리문 실행
$result = $conn->query($playersql);

// 3. SQL에서 정보 가져오기 (mysqli 함수 assoc)
if($result->num_rows>0)
{
    $row = $result->fetch_assoc();
    echo "Score - {$row['Score']}";
}
else
{
    echo "No Player Data";
}

// 4. 연결 종료
$conn->close();
?>

GamePlayer

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GamePlayer
{
    public string Name;
    public int Score;
}

WebServerObject.cs

using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class WebServerObject : MonoBehaviour
{
    GamePlayer player;

    Dictionary<string, string> playerDic = new Dictionary<string, string>();

    private void Start()
    {
        LoadData();
    }

    void SaveData()
    {
        player = new GamePlayer();

        // 정보 입력
        player.Name = "UNITY PLAYER";
        player.Score = 120;

        // 직렬화
        string playerJson = JsonConvert.SerializeObject(player);

        playerDic.Add("player", playerJson);

        StartCoroutine(WebServerManager.GetWWWData("http://44.204.237.0/saveplayer.php", playerDic, GetString));
    }

    void LoadData()
    {
        string playerName = "UNITY PLAYER";
        playerDic.Add("Name", playerName);
        StartCoroutine(WebServerManager.GetWWWData("http://44.204.237.0/loadplayer.php", playerDic, GetString));
    }

    void GetString(string str)
    {
        Debug.Log(str);
    }
}

WebServerManger

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public static class WebServerManager
{
    public static IEnumerator GetWWWData(string _path, Dictionary<string, string> Fields,  Action<string> OutAction)
    {
        WWWForm form = new WWWForm();

        foreach(string key in Fields.Keys)
            form.AddField(key, Fields[key]);

        using (UnityWebRequest www = UnityWebRequest.Post(_path, form))
        {
            yield return www.SendWebRequest();

            if (www.result == UnityWebRequest.Result.ConnectionError ||
                www.result == UnityWebRequest.Result.ProtocolError ||
                www.result == UnityWebRequest.Result.DataProcessingError)
            {
                OutAction(www.error);
            }
            else
            {
                string str = www.downloadHandler.text;

                str = str.Replace("<br>", System.Environment.NewLine);

                OutAction(str);
            }
        }
    }
}
profile
우주최강개발자

0개의 댓글