주의 사항:Photon TrueSync와 Thunder는 서비스 종료되었으며 앞으로도 업데이트 및 릴리즈는 없을 예정입니다. 기존 어플리케이션에 영향은 없습니다만 현재 개발중인 어플리케이션에 대해서는 마이그레이션을 장려합니다.

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 import window
새로운 프로젝트에 TrueSync 임포트하기.

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 계정에서 생성한 것)를 입력해야 하며, 호스팅 지역(당사가 제안하는 아래 그림에 있는 최적 지역)을 선택합니다.

PUN settings
에셋 PUN 설정.

"Auto-Join Lobby"를 체크 해 놓으면 섹션을 더 쉽게 따라할 수 있다는 것을 기억해주세요.

게임이 시작될 때 PUN 이 Photon 클라우드에 접속할 수 있도록 코딩을 해 보겠습니다.

룸에 접속하고 참여하기

Unity에서 신을 생성하고 "Tutorial" 이라고 하는 새롭게 생성된 폴더 밑에 "Menu" 라고 저장합니다.

기본적인 PUN 연결과 룸 생성을 위해 이 신을 사용할 것 입니다. 이제 빈 C# 스크립트를 생성하고 위에서 사용한 동일 폴더에 "TutorialMenu.cs" 로 저장합니다.

Project tab with scene and script
신과 스크립트가 있는 프로젝트 탭

이제 "TutorialMenu.cs" 스크립트를 "Menu" 신에 있는 아무 게임 오브젝트에 붙여 주세요. 아래 그림에서는 카메라에 붙여져 있습니다.

Script attached to camera
카메라에 붙여진 스크립트.

"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 가 시작 할 때 로드 할 신) 첫 번째 신인지 확인 해 주세요.

Build settings
빌드 설정.

플랫폼을 선택하여 두 카피를 실행하거나 한 카피를 실행하고 Unity 에디터에서 Menu 신을 실행합니다. 두 클라이언트 모두 Photon 에 접속 된 후 마스터 클라이언트에서 start 를 누른 후 빈 게임 씬이 로딩되어야 합니다.

이제 (link?) 파트 2로 가서 네트워크 상에서 플레이어 캐릭터 조작 방법을 배워보도록 하겠습니다.

Back to top