본문 바로가기

Game/Unity

[Unity3D]C# + PHP + JsonFX 사용기

JsonFX를 이용하여 php + Unity(C#) 이 통신하는 방법에 대해서 한번에 정리 된 곳이 없기에 정리 해보도록 하자..

 

구현에 대해선 여러 방법이 있겠지만, 일단 내가 한 방법에 대해서 설명해보자면,

 

1. unity에서  php 웹서버로 파라미터 넘기면서 데이터 받아오기

unity에서 사용한 함수는  WWW이고 기본적으로 WWW 함수는 GET방식으로 웹콜 한다.(unity3d 레퍼런스 참고)

하지만, POST 방식으로 넘겨줄 수도 있다.

(GET방식은 테스트 해보진 않았지만, URL인자에 넣고 싶은 파라미터 넣고 php에서 _GET['변수명'] 이렇게 받아오면 되지 않을까??)

 

[WWW 함수를 이용하여 GET, POST, POST-WWWFORM 이렇게 3방법이 존재함]

[POST-WWW(WWWFORM)]

// For call Webpage by wwwform //

Dictionary<string,string> dic = new Dictionary<stringstring>();

dic.Add ( "user_srl""1" );

dic.Add ( "item_id""10001");

WWWForm form = new WWWForm();

    foreach(KeyValuePair<string,string> post_arg in dic)

    {

       form.AddField(post_arg.Key, post_arg.Value);

    }

WWW www = new WWW("http://localhost/shoong/request_buy_item.php", form );

 

난, POST 방식으로 파라미터로 넘기는 방법을 사용(솔직히 다른 방법들은 구현 및 찾기 쉬웠음)

[POST-WWW()]

 // For call WebPage by JsonFX //

Dictionary<string,string> dic = new Dictionary<stringstring>();

dic.Add ( "user_srl""1" );

dic.Add ( "item_id""10001");

var encoding = new System.Text.UTF8Encoding();

string data = JsonWriter.Serialize( dic );

Hashtable header = new Hashtable();

header.Add ("Content-Type""text/json");

header.Add ("Content-Length", data.Length );

 

WWW www = new WWW("http://localhost/shoong/request_buy_item.php", encoding.GetBytes(data), header );

 

while (!www.isDone)

{

yield return null;

}

if (!www.isDone || !string.IsNullOrEmpty(www.error))

        {

 

            Debug.LogError(string.Format("Fail Whale!\n{0}"www.error));

 

            yield break;

        }

else

{

string testData = www.text;

testData = testData.Trim();

CustomObject[] customObject = JsonReader.Deserialize<CustomObject[]>( testData);

}

 

 

 

2. php 코드에서 처리 하기


 

unity에서 www(form)형태로 넘겨준 데이터를 받기 위해서 아래와 같이 해주면 된다..

www(form)으로 받는게 편하긴한데.. 이건 json을 쓰는 방식이 아니니..PASS

 <?php

 // WWW(FORM)에서 넘겨준 변수 아이디를 직접 입력해주면 됨

$user_srl = _POST[user_srl];

$item_id = _POST[item_id];

?>

 


php에서 post형식의 encoding 되어 있는 데이터를 받기 위해선 json_decode(file_get_contents('php://input')); 을 호출 해야 한다.

 <?php

$addr = 'localhost:3307';

$connect = mysql_connect($addr, 'root', 'qortmdgh');

if (!$connect)

{

echo 'Failed... mysql connect <br />';

}

mysql_query("SET NAMES utf8");

$db_name = 'nuke';

$result = mysql_select_db('nuke', $connect);

if (!$result)

{

echo 'Failed... mysql select_db <br />';

}

$json = json_decode(file_get_contents('php://input'));

$user_srl = $json->user_srl;

$item_id = $json->item_id;

$return = array('id'=>$user_srl, 'name_k'=>'AAAA', 'price_cash'=>$item_id, 'price_gold'=>$item_id);

mysql_close($connect);

$isXmlHttpRequest = (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) ?

    (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false: false;

($isXmlHttpRequest) ? header('Content-type: application/json') : header('Content-type: text/plain');

echo json_encode($return);

?>


출처 : http://blog.naver.com/PostView.nhn?blogId=bback99&logNo=150165850558