서버는 이전에 게시글로 올린 무료 소켓 서버 Hnetwork를 사용했다.

Hnetwork의 Unity 연동 방법은 Hnetwork 카페에 자세히 나와있다.

bora-game-develop-history.tistory.com/9

 

[Unity/Server] 유니티 간단한 무료 게임 서버 추천

간단한 게임에 서버가 필요한데 돈 주고 사기에는 또 좀 아깝다. 그래서 열심히 구글링해서 찾은 무료 게임 서버 Hnetwork이다. 카페에 들어가면 코드와 사용법이 친절하게 나와있다. 복잡한 처리�

bora-game-develop-history.tistory.com

 

 

데이터베이스는 역시 무료인 MySQL을 사용했다.

www.mysql.com/downloads/

 

MySQL :: MySQL Downloads

Contact MySQL  |  Login  |  Register The world's most popular open source database MySQL.com Downloads Documentation Developer Zone MySQL Database Service is a fully managed database service to deploy cloud-native applications using the world's most po

www.mysql.com

사실 GameSparks라는 게임 백엔드 솔루션을 사용하면 편하지만, GameSparks는 NoSQL인 MongoDB를 사용해서 SQL 공부를 하기 위해 Hnetwork와 MySQL을 사용하기로 결정했다. (Unity: C# / Hnetwork: C++ / MySQL: SQL)

 

 

클라이언트에서 바로 데이터베이스에 접근하여 데이터를 사용할 수 있지만, 이러한 방식은 보안상 좋지 않기 때문에 데이터베이스는 서버에서만 접근할 수 있게 하는 것이 좋다.

 

대표적인 통신 방식

 

Hnetwork 카페에 MySQL 연동 및 데이터 송수신 방법이 나와있다. 해당 게시물을 참고하여서 로그인/회원가입 시스템을 만들었다.

 

UGUI를 이용한 로그인/회원가입 UI

간단하게 InputField와 Button을 이용하여 로그인/회원가입 UI를 만들었다.

MySQL에 User 테이블 생성

데이터베이스의 User 테이블을 생성하여 플레이어의 닉네임과 비밀번호 등의 정보를 저장한다.

테이블 생성은 CREATE TABLE 테이블명 ( 애트리뷰트1, 애트비뷰트2... 애트리뷰트n PRIMARY KEY(애트리뷰트명))

할 수 있다. 아래는 User Table의 모든 레코드를 SELECT한 값이다.

 

 

로그인 통신 절차

1. 로그인 버튼을 누르면 클라이언트는 서버에게 입력한 닉네임, 비밀번호를 포함한 로그인 요청 패킷을 보낸다.

2. 서버는 패킷을 받은 뒤 데이터베이스에 해당 닉네임과 비밀번호를 가진 플레이어가 있는지 확인한다.

3. 서버는 확인 결과(로그인 성공 or 실패)를 클라이언트에게 패킷으로 보낸다.

 

회원가입 통신 절차

1. 회원가입 버튼을 누르면 클라이언트는 서버에게 입력한 닉네임, 비밀번호를 포함한 회원가입 요청 패킷을 보낸다.

2. 서버는 패킷을 받은 뒤 데이터베이스에 해당 닉네임과 동일한 다른 유저가 존재하는지 확인한다.

   여기서 닉네임은 User 테이블에서 기본 키이므로 중복되어서는 안된다.

3. 서버는 확인 결과(닉네임 중복 여부에 따른 회원가입 성공 or 실패)를 클라이언트에게 패킷으로 보낸다. 

 

회원 가입 코드

- 클라이언트

우선 Unity에서 회원가입 버튼을 눌렀을 때 아래 함수를 호출한다. 패킷의 타입을 통해 어떠한 요청을 하는 패킷인지 지정할 수 있다. 아래에서는 회원가입 요청 패킷을 서버로 전송했다.

 

- 서버

서버가 클라이언트에게 패킷을 받으면 OnMessage 함수가 호출되고 받은 패킷의 타입에 따라 다른 이벤트를 실행한다.

패킷이 회원가입 요청 패킷이라면 아래의 Authentication() 함수를 실행한다. 해당 함수에서는 데이터베이스에 접근하여 INSERT INTO user 지시어를 통해 record를 추가한다.

 

 

 

User 테이블에 Newplayer가 추가된 모습

+ Recent posts