(번역)시작하기
Colyseus의 기본적인 사용법을 익히기 위해 공식 문서의 시작하기(Getting Started)를 따라해본다.
어차피 공부하는 거 겸사겸사 발번역으로 정리하면서 정리한다.
전반적인 내용은 '미리 만들어 둔 예제 프로젝트를 보라구 핫산'하기 때문에 초심자를 위한 문서는 아니다.
▼ 원문
docs.colyseus.io/getting-started/unity3d-client/
유니티 3D
설치하기
● 최신버전의 Coloseus-unity3d를 내려받아 주세요.(내려받기 링크)
● Assets/Plugins에 있는 파일들을 여러분들의 유니티 프로젝트에 복사 붙여넣기 해주세요.
데모 서버 실행하기
The colyseus-unity3d comes with a usage example, and a simple room handler for basic testing. 아래의 명령줄 명령어를 통해서 여러분들의 로컬 서버를 실행할 수 있습니다.
cd Server
npm install
npm start
데모 서버는 사용자 인증을 위해서 @colyseus/social를 사용합니다.
이 기능은 MongoDB를 사용하기 때문에 MongoDB가 없다면 아래의 링크를 따라 설치합니다.
https://docs.mongodb.com/manual/installation/#mongodb-community-edition-installation-tutorials
※ 팁
로컬 서버를 실행하기 위해서 NodeJS가 8.x 버전 이상 설치되어 있는지 꼭 확인하세요.
역자주 :
가장 최신의 LTS 버전을 설치하면 된다.
이걸 통해서 기본 예제에서 사용되는 서버는 웹소켓(WebSocket) 기반이라는 것을 알 수 있다.
사용법
각각의 클라이언트와 룸의 연결들은 자체 코루틴(Coroutine)에서 실행되어야 합니다. 더 자세한 정보를 얻기 위한다면 사용 예를 살펴보세요.
서버에 연결하기
Client client = new Colyseus.Client ("ws://localhost:2567");
역자주:
Client 클래스의 주소를 지정해서 초기화한다. 이는 P2P의 경우 클라이언트가 서버가 될 수도 있기 때문으로 보인다.
방에 참가하기
상태처리(State Handling)에서 방 상태(RoomState)를 생성하는 방법을 확인하세요.
try {
Room room = await client.JoinOrCreate<RoomState> ("room_name");
Debug.Log("Joined successfully!");
} catch (ex) {
Debug.Log("Error joining: " + ex.Message);
}
역자주:
try {} catch (ex) {}로 예외처리를 하고 있다. Room에 정상적으로 참가가 되지 않으면 예외를 발생한다.
서버로부터 전체 방 상태를 받아오기
room.OnStateChange += OnStateChange;
void OnStateChange (State state, bool isFirstState)
{
if (isFirstState) {
// First setup of your client state
Debug.Log(state);
} else {
// Further updates on your client state
Debug.Log(state);
}
}
개요(Schema) 구조체에 콜백 연결하기
상태처리(State Handling)에서 방 상태(RoomState)를 생성하는 방법을 확인하세요.
Room room = await client.Join<RoomState> ("room_name");
Debug.Log("Joined room successfully.");
room.State.players.OnAdd += OnPlayerAdd;
room.State.players.OnRemove += OnPlayerRemove;
room.State.players.OnChange += OnPlayerChange;
void OnPlayerAdd(Player player, string key)
{
Debug.Log("player added!");
Debug.Log(player); // Here's your `Player` instance
Debug.Log(key); // Here's your `Player` key
}
void OnPlayerRemove(Player player, string key)
{
Debug.Log("player removed!");
Debug.Log(player); // Here's your `Player` instance
Debug.Log(key); // Here's your `Player` key
}
void OnPlayerChange(Player player, string key)
{
Debug.Log("player moved!");
Debug.Log(player); // Here's your `Player` instance
Debug.Log(key); // Here's your `Player` key
}
역자주:
복잡해 보이지만 서버에 플레이어 추가, 플레이어 삭제, 플레이어 변경 기능을 작성하는 부분으로 보인다.
디버깅
웹소켓(WebSocket) 연결이 열려있는 동안 애플리케이션에 중단 점을 설정하면 비활성 상태로 인해 3초 후에 연결이 자동으로 닫힙니다.
웹소켓(WebSocket) 연결이 끊어지는 것을 방지하려면, 개발하는 동안 pingInterval: 0 을 사용하세요.
import { Server, RedisPresence } from "colyseus";
const gameServer = new Server({
// ...
pingInterval: 0 // HERE
});
출시 버전에서는 pingInterval이 0보다 반드시 커야합니다. 기본 pingInterval 값은 3000입니다.
역자주:
pinInterval은 밀리초로 기입한다는 것을 알 수 있다.