TrueSync 튜토리얼 파트 1
튜토리얼 내용
이 튜토리얼 시리즈에서는 Photon TrueSync 를 이용하여 Unity 로 간단한 멀티플레이어 게임을 만드는 방법에 대해서 설명합니다. Photon TrueSync 는 결정론적 lockstep 시스템이기 때문에 모든 게임 코드는 반드시 모든 클라이언트 컴퓨터에서 동일 순서로 실행되는 이산 단계(틱이라고 부름)로 실행되어야 항상 결과가 같게 됩니다.
이 튜토리얼은 4 파트 단계적으로 구성되어 있으며, 각 단계에서 TrueSync 의 주요 개념을 보여주고 있습니다. 각 파트가 마무리 되는 시점에서는 잘 진행했는지 확인을 위해 게임을 실행해 볼 수 있습니다.
- 파트 1: 소개, 다운로드와 설치 – 이 파트에서는 다운로드와 설치 방법 및 게임클라이언트들이 Photon 클라우드에 접속하여 네트워크 게임(Photon 룸)에 참여하는 기본적인 Photon Unity Network (PUN) 코드에 대해 설명합니다.
- 파트 2: 상자 움직이기 - TrueSyncManager 게임 오브젝트를 설정, TrueSync 의 결정론적 물리 엔진으로 플레이어 프리팹 생성, 플레이어의 움직임 코드 추가 및 게임 클라이언트들 간에 input 동기화를 해 주는 부분입니다.
- 파트 3: 총알 발사 – 동기화된 인스턴스생성 및 게임 오브젝트의 파괴, 죽고 죽인 점수 유지하기
- 파트 4: 롤백과 상태 추적 – 롤백을 이용한 레이턴시 숨김, 커스텀 변수와 객체 상태를 추적하여 게임 상태가 어그러지는 사항 방지
파트 1에서 학습할 수 있는 것:
Photn 클라우드에 연결하고 다른 클라이언트가 Photon 룸에 참여하는 게임 클라이언트 제작
TrueSync 다운로드
에셋 스토어 탭(Unity 내의 Window/Asset Store)를 이용하여 TrueSync를 다운로드하고 임포트 합니다. 에셋 스토어에서 "TrueSync" 검색하거나 공식 스토어 항목에서 "open in Unity" 를 클릭해주세요.
Unity로 열었을 때 다운로드할 옵션이 나타나게 되고 현재 프로젝트에 임포트를 합니다. 새롭게 생성된 프로젝트에 이렇게 임포트 해주세요.
TrueSync 에는 PUN (Photon Unity Networking) 최신 버전이 포함되어 있습니다. PUN 은 Photon 룸에 게임 클라이언트들이 접속하고 TrueSync 에 필요한 커뮤니케이션 시스템을 제공하는데 사용됩니다.
PUN 설정하기
TrueSync를 사용하기 위해서는 Photon 계정이 필요하므로, 계정이 없으면 to Photon 웹사이트 에서 계정을 생성하시기 바랍니다. 계정에서 새로운 App ID를 생성하고 복사하여 이 튜토리얼에서 사용하시기 바랍니다.
이제 Unity 에서 project 탭으로 가서 "Photon Unity Networking/Resources" 를 찾아 "PhotonServerSettings" 에셋을 클릭하세요. 나의 App ID ( photonengine.com 계정에서 생성한 것)를 입력해야 하며, 호스팅 지역(당사가 제안하는 아래 그림에 있는 최적 지역)을 선택합니다.
"Auto-Join Lobby"를 체크 해 놓으면 섹션을 더 쉽게 따라할 수 있다는 것을 기억해주세요.
게임이 시작될 때 PUN 이 Photon 클라우드에 접속할 수 있도록 코딩을 해 보겠습니다.
룸에 접속하고 참여하기
Unity에서 신을 생성하고 "Tutorial" 이라고 하는 새롭게 생성된 폴더 밑에 "Menu" 라고 저장합니다.
기본적인 PUN 연결과 룸 생성을 위해 이 신을 사용할 것 입니다. 이제 빈 C# 스크립트를 생성하고 위에서 사용한 동일 폴더에 "TutorialMenu.cs" 로 저장합니다.
이제 "TutorialMenu.cs" 스크립트를 "Menu" 신에 있는 아무 게임 오브젝트에 붙여 주세요. 아래 그림에서는 카메라에 붙여져 있습니다.
"TutorialMenu.cs" 를 열어 "PunBehaviour" 클래스로 상속 받도록 만들어주고 "Start()" 메소드 안에 다음의 코드를 입력하여 아래와 같이 작성합니다.
C#
using UnityEngine;
using System.Collections;
public class TutorialMenu : Photon.PunBehaviour {
void Start () {
PhotonNetwork.ConnectUsingSettings ("v1.0");
}
}
이 코드는 이전 섹션에서 설정한 값을 이용하여 Photon에 접속 할 것 입니다. Photon 서버 접속과 로비에 참여(PUN 이 로비 자동 참여로 설정했었다는 것을 기억하세요)한 이후 PUN 은 게임 룸 생성과 참여에 사용할 수 있는 콜백을 실행할 것 입니다.
C#
public override void OnJoinedLobby() {
PhotonNetwork.JoinOrCreateRoom ("room1", null, null);
}
이 코드는 PUN 이 무작위로 룸에 참여하거나 아직 룸이 없는 경우 룸을 생성 할 것입니다. 룸 생성/참여에는 다양한 옵션들이 있으며 PUN 문서에서 보셨을 수도 있으나 이 튜토리얼에서는 이것만으로도 충분합니다.
신 로딩
룸이 잘 생성되고 참여했을 때, Photon 은 또 다른 콜백을 실행할 것이고 이 콜백으로 동시에 룸에 연결되어 있는 모든 클라이언트의 신 로드를 조정할 것 입니다.
TruSync 에서 조정되어지는 결정론전 lockstep 세션이 발생하게 되는 게임 신으로부터 메뉴 신을 분리하였습니다.
새로운 신을 생성하고 "Game" 이라고 합니다. 이 튜토리얼의 파일들이 있는 "Tutorial" 폴더에 저장합니다. "TutorialMenu.cs" 스크립트로 다시가서 다음의 코드를 추가합니다.
C#
void OnGUI() {
GUI.Label (new Rect(10, 10, 100, 30), "players: " + PhotonNetwork.playerList.Length);
if (PhotonNetwork.isMasterClient && GUI.Button (new Rect (10, 40, 100, 30), "start")) {
PhotonNetwork.automaticallySyncScene = true;
PhotonNetwork.LoadLevel ("Tutorial/Game");
}
}
이 코드는 마스터-클라이언트 (룸을 생성한 클라이언트)에 있는 플레이어가 Photon으로 룸에 연결되어있는 모든 클라이언트들에게 동시에 게임 신을 로드하라고 요청할 수 있는 권한을 부여 합니다. 또한 룸에 현재 몇 명의 플레이어들이 연결되어 있는지도 보여 줍니다.
테스팅
두 개의 신(Tutorial/Menu 과 Tutorial/Game )들이 빌드 설정에 추가되어 있는지 확인 해 주시고, Tutorial/Menu 가 (Unity 가 시작 할 때 로드 할 신) 첫 번째 신인지 확인 해 주세요.
플랫폼을 선택하여 두 카피를 실행하거나 한 카피를 실행하고 Unity 에디터에서 Menu 신을 실행합니다. 두 클라이언트 모두 Photon 에 접속 된 후 마스터 클라이언트에서 start 를 누른 후 빈 게임 씬이 로딩되어야 합니다.
이제 (link?) 파트 2로 가서 네트워크 상에서 플레이어 캐릭터 조작 방법을 배워보도록 하겠습니다.
Back to top