본문 바로가기

프로그래밍/Unity 3D

[Unity3D] 유니티 간단하게 서버통신하기 개인 랭킹, 공지사항, 현재시간 등

유니티를 활용하여 간단하게 서버에 게임변수들을 저장할 수 있습니다. 저는 랭킹이나 플레이어 저장 정보같은 경우는 구글 플레이 게임 서비스를 이용하고 있습니다. 구글 서버인만큼 안정적이니까요. 제가 서버DB에 저장하기를 추천드리는 항목은 공지사항이나 현재서버시간 처럼 업데이트 없이도 값을 변경해야할 필요성이 있는 부분입니다.

본격적으로 설명드리기에 앞서 개인적으로 서버를 소유하고 계셔야한다는 말씀을 드리고 싶습니다. 요즘엔 어려운일이 아닙니다. 닷홈이나 cafe24같은 무료 호스팅 사이트를 이용해 간단하게 무료서버를 소유하실 수 있습니다. 무료 서버는 일일 트래픽제한이 있습니다. 만약 이용자가 많아져 트래픽제한을 넘어서게 되면 유료로 업그레이드를 해주시면됩니다. 물론 이용자가 많아진 만큼 부담은 적어질 것으로 예상합니다.


사전 준비작업

http요청을 위해서 서버가 없으신 분들은 무료 서버를 호스팅하세요.

http://dothome.co.kr

저는 닷홈 무료호스팅을 이용중인데요. 만약 닷홈에서 무료호스팅을 신청하셨다면 이런 형식의 url을 받게됩니다.

http://xxxxxx.dothome.co.kr/

그럼 GameManager.cs 와같은 싱글턴 객체에서 domain 변수를 선언해줍니다.

private domain = "http://xxxxxx.dothome.co.kr/";

저는 GameManager내에서만 http요청 함수를 작성할 것이기 때문에 private로 선언했습니다.


php 코드 작성

파일질라 등의 ftp 프로그램을 이용해서 서버에 php파일을 업로드하셔야합니다.

예를 들어서 현재 날짜와 시간을 출력해주는 php파일을 작성해보겠습니다.

현재 날짜와 시간을 얻어올 경우 echo date("Y-m-d H:i:s"); 코드만 있으면 됩니다.

코드로 본다면

<?php

echo date("Y-m-d H:i:s"); 

?>

정도가 되겠지요. 간단하게

<?=date("Y-m-d H:i:s")?> 로만 표현해주셔도 됩니다. 파일이름은 nowtime.php로 설정했습니다.


코루틴 작성

(UnityEngine.)www객체를 이용해 httpRequest를 합니다. 정말로 저 위의 코드가 끝입니다. 위에서 php뒤에 '?변수명=값'만 붙여준다면 GET 요청을 할 수 있습니다.

위처럼 할 경우 게임 내의 어느 스크립트에서 StartCoroutine(GameManager.Instance.GetNowTime()); 코드를 실행할 경우

curtime 이라는 전역변수가 현재 시간으로 설정됩니다. 코루틴을 활용해 비동기방식으로 http요청을 수행했다고 볼 수 있습니다.

yield return www; 에서 요청을 실행 후 응답을 받으면 다음 코드를 실행합니다. 년-월-일 시:분:초 이런식으로 String 형태로 응답이 오는데 위의 코드로 String을 DateTime 형식으로 바꿔줄 수 있습니다.


POST요청을 해야할 경우 www객체를 선언하기 전에 WWWForm 객체를 하나 선언해서 (변수명 = form)

form.AddField("변수명", 값); 코드만 넣은 후 www객체 초기화시 두번째 인자에 form 을 넣어주시면 되겠습니다.

Jquery나 php 의 curl을 이용한 http요청보다 훨씬 가독성이 뛰어난것 같습니다.


공지사항 같은 경우도 php파일에서 텍스트만 간단하게 수정해서 변경 가능하겠죠?

랭킹을 구현해야할 경우 sql을 사용해서 서버에 db를 저장해야합니다. 저는 아직 구글 리더보드를 사용합니다.




컴활 벼락치기 이후 오랜만에 유니티 글을 포스팅하네요... 이제 다시 게임 개발에 집중해봐야겠습니다.

감사합니다.