[Unity 3D]랭킹 구현(MySQL, Photon Network)

2020. 7. 28. 22:14[Unity] 게임 개발

반응형

오늘은 개발중이던 게임의 랭킹 시스템을 구현해보았다

 

PHP문

<?php
$host = ""; //보안위해 정보는 가리겠습니다.
$user = "";
$pass = "";
$dbName = "";

$Id = $_POST["IdPost"];

$connect = mysqli_connect($host,$user,$pass,$dbName);


if(!$connect)
{
  die("Connection Failed.". mysqli_connect_error());
}

$checksql = "SELECT * FROM Login Where (Id) = ('".$Id."')";

$sql="SELECT (Id), (Victory), (Defeat)
,@RANKT := IF(@LAST > (Victory), @RANK := @RANK + 1, @RANK) AS RANKING
,@LAST := (Victory)
FROM Login, (SELECT @RANK := 0) XX
ORDER BY (Victory) DESC";
$sql3result = mysqli_query($connect, $sql);

$RANK =0;
$LastVictory =0; 
while($result_row = mysqli_fetch_assoc($sql3result))
{
    if($result_row['Victory']!=$LastVictory)
    {
      $RANK++;      
    }

    echo ','.$result_row['Id'].','.$result_row['Victory'].','.($RANK).','."\n";

    $LastVictory = $result_row['Victory'];
}

?>

Unity 와 무료호스팅 서버DB와 PHP문을 통해 랭킹시스템을 구현하였다

작성한 PHP문은 호스팅 서버가 5.7.30 - MySQL Community Server (GPL) 버전이라

우선 Rank()함수는 호환이 안되는 상태였다.

때문에 Login 테이블에 Victory칼럼의 수를 비교하여 Rank를(중복시 같은 랭킹 나오게) 구해주었다

 

Unity C#문

    IEnumerator RankingUpdate(string ID)
    {
        WWWForm form = new WWWForm();
        form.AddField("IdPost", ID);
        WWW www = new WWW(RankingURL, form);

        yield return www;
        Rank = www.text.Split(',');
        Debug.Log(PhotonNetwork.LocalPlayer.NickName);
        for (int i = 0; i < Rank.Length; i++)
        {
            if (Rank[i] == PhotonNetwork.LocalPlayer.NickName)
            {
                MyRank = Rank[i + 2];
            }
        }
        PhotonNetwork.LocalPlayer.CustomProperties.Remove(PlayerInformation.PLAYER_RANKING);
        PhotonNetwork.LocalPlayer.CustomProperties.Add(PlayerInformation.PLAYER_RANKING, MyRank);
        PhotonNetwork.LocalPlayer.SetCustomProperties(PhotonNetwork.LocalPlayer.CustomProperties);
        Debug.Log("내 랭킹은"+MyRank);
        Debug.Log("www.text :" + www.text);
    }

 

그 후 유니티 내에서 POST방식 연동,  코루틴 문에서 DB가 보내주는 www.text를 ',' 문자를 기준으로 split하여,

i = 계정이름 ,  i+2 = Ranking의 형식을 완성하여 PhontonNetWork의 닉네임과 동일한 계정이름의 Ranking을 도출해내었다.

코루틴 문은 게임이 종료되는 시점에서 호출.

 

결과 화면

이제 게임의 결과신에서 Kill/Death 정보와 Ranking까지 출력되는 것을 확인할 수 있다.

 

 

 

반응형