This document is about: PUN 1
SWITCH TO

PUN Classic (v1), PUN 2, Bolt는 휴업 모드입니다. Unity2022에 대해서는 PUN 2에서 서포트하지만, 신기능의 추가는 없습니다. 현재 이용중인 고객님의 PUN 및 Bolt 프로젝트는 중단되지 않고, 퍼포먼스나 성능이 떨어지는 일도 없습니다. 앞으로의 새로운 프로젝트에는 Photon Fusion 또는 Quantum을 사용해 주십시오.

파트 3 - 게임 신

이 섹션에서는 플레이어들이 플레이 하는 여러 신을 생성 하는 것을 다루게 됩니다.

각 신은 특정 플레이어 수로 지정되며 플레이어 수가 많아지면 더 커져서 플레이어들이 움직일 수 있는 공간을 제공 합니다.
이 튜토리얼의 아래에서는 플레이어 수에 따른 적정한 레벨을 로드하는 로직을 구현 할 것 이며 다음의 형식으로 레벨에 대해서 명명 할 것 입니다:

"Room for X" X 는 플레이어 숫자를 나타냅니다.

첫 번째 룸 생성

  1. 새로운 신을 생성하여 정확히 `"Room for 1"로 저장 합니다.
  2. 큐브를 생성하여 이름을 floor 로 합니다.
  3. Position 은 0,0,0 으로 합니다. 플레이어를 중심부 위 (0,x,0) 에 스폰하는 것이 우리 로직 시스템에서 중요 합니다.
  4. floor 의 값은 20,1,20 으로 설정 합니다.

플레이 할 수 있는 단계로는 충분 하지만 벽이 있어야 플레이어를 그 안에서 플레이 할 수 있도록 해줄 것 입니다.
따라서 간단하게 큐브를 생성하여 위치, 회전, 확대 정보를 조정 해 벽 처럼 만들어 주시기 바랍니다.
floor 게임 오브젝트에 대한 4개의 벽의 위치, 스케일 정보가 아래에 있습니다.

Wall 1 x y z
Position 0 2 -10
Rotation 0 0 0
Scale 20 3 1
Wall 2 x y z
Position 0 2 10
Rotation 0 0 0
Scale 20 3 1
Wall 3 x y z
Position -10 2 0
Rotation 0 90 0
Scale 20 3 1
Wall 4 x y z
Position 10 2 0
Rotation 0 90 0
Scale 20 3 1

현 시점에서는 Room For 1 신으로 저장해야 한다는 것을 기억 하세요.

Game Manager 프리팹

모든 경우에 있어서, 사용자 인터페이스의 최소 요구사항은 룸에서 빠져 나갈 수 있도록 하는 것 입니다. 이를 위해 UI Button이 필요하고 로컬 플레이어가 룸에서 나갈 수 있도록 Photon 메소드를 호출하는 스크립트도 필요 합니다. 로컬 플레이어가 룸에서 나갈 수 있게 하기 위해 Game Manager라고 하는 프리팹을 생성하고 현재 룸에 참여중인 로컬 플레이어가 룸에서 빠져 나올 수 있도록 하는 작업을 할 것 입니다.

  1. C# 스크립트 GameManager 를 생성 합니다.
  2. 신에서 빈 게임 오브젝트를 생성하여 Game Manager 로 이름을 변경 합니다.
  3. GameManager 스크립트를 Game Manager 게임오브젝트에 드래그 합니다.
  4. Game Manager 를 프리팹으로 변경하기 위해 Hierarachy 에서 드래그하여 Assets Browser 로 끌어 놓으면 Hierarchy 에서 파란색으로 변경됩니다.
  5. GameManager 스크립트를 편집 합니다.
  6. GameManager 스크립트를 다음의 코드로 교체 합니다.

C#

using System;
using System.Collections;

using UnityEngine;
using UnityEngine.SceneManagement; 

namespace Com.MyCompany.MyGame
{
    public class GameManager : MonoBehaviour {

        #region Photon Messages
    
        /// <summary>
        /// Called when the local player left the room. We need to load the launcher scene.
        /// </summary>
        public void void OnLeftRoom()
        {
            SceneManager.LoadScene(0);
        }

        #endregion
    
        #region Public Methods

        public void LeaveRoom()
        {
            PhotonNetwork.LeaveRoom();
        }

        #endregion    
    }
}

public 메소드인 LeaveRoom() 을 생성 하였습니다. 이 메소드는 명시적으로 플레이어를 Photon Network 룸에서 나가도록 하며 추상화를 위해서 public 메소드로 wrap 하였습니다.
다음 단계에서는 데이터 저장 또는 확인 단계 추가등 더 많은 기능 추가를 할 수 있습니다.
게임 요구사항에 기반하여 룸에 있지 않을 경우 Launcher 신이 표시되어야 하고 Photon 콜백 OnLeftRoom() 을 listen 하고 [Build Setting]의 신 목록에서 0번 인덱스 로비 신인 Launcher 를 로드합니다. 이 섹션의 Build Settings Scene List 에서 신의 인덱스를 설정 할 것 입니다.

그런데 왜 우리는 프리팹으로 만들었을까요? 동일한 게임의 몇가지 신을 넣어야 하기 때문에 Game Manager 재활용이 필요하기 때문입니다.
유니티에서 게임오브젝트 재활용을 위해서 가장 좋은 방식은 프리팹으로 변경 하는 것 입니다.

다음에는 GameManager LeaveRoom() 메소드를 호출 하는 UI Button을 생성하겠습니다.

Quit Room Button Prefab

다시한번 Game Manager 와 같은 관점에서 이 기능이 필요한 여러 다른 신들이 있으면 먼저 계획하여 Button 을 프리팹으로 만들어서 재활용 하고 나중에 다시 사용할 수 있도록 하는 것이 합리적일 것입니다.

  1. Room for 1 신에 있는지 확인 해주세요.
  2. 유니티 메뉴 'GameObject/UI/Panel' 에서 UI Panel 을 생성하여 Top Panel 로 이름을 부여 합니다.
  3. 이 Panel 에서 ImageCanvas Renderer 컴포넌트를 제거 합니다. 보기에 나쁘지 않으면 그대로 유지 해도 좋습니다.
  4. ShiftAlt 를 누른 상태로 수직 Anchor Presets 를 top 으로 수평 anchor preset 은 stretch 로 설정 합니다.
    RectTransform Anchors 사용하려면 약간의 경험이 필요하지만 그만한 가치가 있습니다 :)
  5. RectTransform 높이를 50 으로 설정 합니다.
  6. Panel GameObject 를 우클릭하여 Top Panel UI/Button 을 추가하고 Leave button으로 이름을 변경 합니다.
  7. Leave button 의 차일드 텍스트를 선택 하고 텍스트를 Leave Game으로 변경 합니다.
  8. OnClick button의 이벤트와 Hierarchy 의 Game Manager 인스턴스를 연결하여 LeaveRoom()을 호출 하도록 합니다.
Button onClick Action
Button onClick Leave Action
7. 신 Hierarchy 에서 `Leave button` 을 Assets Browser 로 드래그 하여 프리팹으로 변경 하면 Hierarchy 에서 파라색으로 변경 됩니다. 8. 신을 저장하고 프로젝트를 저장 합니다.

다른 룸들 생성

하나의 룸을 맞게 생성 했으므로 3번 복사 하겠습니다. 그리고 이름을 적절하게 명명합니다(유니티에서 복사할 때 이미 이름을 부여 하게 됩니다 ):

위치, 회전과 스케일을 변경하기 위해서 아래의 값을 참고 하시기 바랍니다.

Room for 2

Floor Scale: 36,1,36

Wall 1 x y z
Position 0 2 -18.5
Rotation 0 0 0
Scale 36 3 1
Wall 2 x y z
Position 0 2 18.5
Rotation 0 0 0
Scale 36 3 1
Wall 3 x y z
Position -18.5 2 0
Rotation 0 90 0
Scale 36 3 1
Wall 4 x y z
Position 18.5 2 0
Rotation 0 90 0
Scale 36 3 1

Room for 3

Floor Scale: 50,1,50

Wall 1 x y z
Position 0 2 -25
Rotation 0 0 0
Scale 50 3 1
Wall 2 x y z
Position 0 2 25
Rotation 0 0 0
Scale 50 3 1
Wall 3 x y z
Position -25 2 0
Rotation 0 90 0
Scale 50 3 1
Wall 4 x y z
Position 25 2 0
Rotation 0 90 0
Scale 50 3 1

Room for 4

Floor Scale: 60,1,60

Wall 1 x y z
Position 0 2 -30
Rotation 0 0 0
Scale 60 3 1
Wall 2 x y z
Position 0 2 30
Rotation 0 0 0
Scale 60 3 1
Wall 3 x y z
Position -30 2 0
Rotation 0 90 0
Scale 60 3 1
Wall 4 x y z
Position 30 2 0
Rotation 0 90 0
Scale 60 3 1

신 목록 빌드 설정

편집과 게시할 때 프로젝트에서 중요한 오퍼레이션 Build Settings로 모든 신들을 추가하여 유니티가 어플리케이션을 빌드 할 때 추가 하도록 해야 합니다.

  1. "File/Build Settings" 메뉴를 통하여 Build Settings를 오픈 합니다.
  2. 모든 신을 드래그앤 드롭 하고 launcher 신은 리스트의 첫번째가 되며 유니티가 기본적으로 그 신을 로드하여 플레이어에게 보여 줄 것 입니다.
Build Settings: Scenes In Build
Build Settings: Scenes In Build

이제 기본 신 설정을 완료 했으므로 이제 모든 것을 진행할 준비가 되었고 다음 섹션에서 진행하도록 하겠습니다.

다음 파트.
이전 파트.

Back to top