This document is about: PUN 2
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개의 벽의 위치, 스케일 정보는 아래를 참고하십시오.

Room for 1: 벽 11 트랜스폼 값
Room for 1: 벽 1 트랜스폼 값
Room for 1: 벽 2 트랜스폼 값
Room for 1: 벽 2 트랜스폼 값
Room for 1: 벽 3 트랜스폼 값
Room for 1: 벽 3 트랜스폼 값
Room for 1: 벽 4 트랜스폼 값
Room for 1: 벽 4 트랜스폼 값

지금 Room For 1 으로 씬을 저장해야 한다는 것을 잊지 마세요.

게임 매니저 프리팹

모든 경우에, 사용자 인터페이스에서 필요한 최소로 필요한 기능은 룸에서 나갈 수 있도록 하는 것 입니다. 이를 위해 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. 스크립트를 다음 코드로 바꾸어 줍니다.

    C#

    using System;
    using System.Collections;
    
    using UnityEngine;
    using UnityEngine.SceneManagement; 
    
    using Photon.Pun;
    using Photon.Realtime;
    
    namespace Com.MyCompany.MyGame
    {
        public class GameManager : MonoBehaviourPunCallbacks 
        {
    
            #region Photon Callbacks
    
            /// <summary>
            /// Called when the local player left the room. We need to load the launcher scene.
            /// </summary>
            public override void OnLeftRoom()
            {
                SceneManager.LoadScene(0);
            }
    
            #endregion
    
            #region Public Methods
    
            public void LeaveRoom()
            {
                PhotonNetwork.LeaveRoom();
            }
    
            #endregion  
        }
    }
    
  7. GameManager 스크립트를 저장합니다.

public 메소드인 LeaveRoom() 을 생성 하였습니다. 이 메소드는 명시적으로 플레이어를 Photon Network 룸에서 나가도록 하며 추상화를 위해서 public 메소드로 wrap 하였습니다.
다음 단계에서는 데이터 저장 또는 확인 단계 추가등 더 많은 기능 추가를 원할 것 입니다.

게임 요구사항에 기반하여 룸에 있지 않을 경우 Launcher 씬이 표시되어야 하고 Photon 콜백 OnLeftRoom() 을 listen 하고 [Build Setting]의 씬 목록에서 0번 인덱스 로비 씬인 Launcher 를 로드합니다. 이 섹션의 씬 목록 빌드 설정 에서 씬의 인덱스를 설정 할 것 입니다.

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

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

룸 종료 버튼 프리팹

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

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

다른 룸 생성

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

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

Room for 2

Floor Scale: 36,1,36

Room for 2: Wall 1 Transform values
Room for 2: 벽 1 트랜스폼 값
Room for 2: Wall 2 Transform values
Room for 2: 벽 2 트랜스폼 값
Room for 2: Wall 3 Transform values
Room for 2: 벽 3 트랜스폼 값
Room for 2: Wall 4 Transform values
Room for 2: 벽 4 트랜스폼 값

Room for 3

Floor Scale: 50,1,50

Room for 3: Wall 1 Transform values
Room for 3: 벽 1 트랜스폼 값
Room for 3: Wall 2 Transform values
Room for 3: 벽 2 트랜스폼 값
Room for 3: Wall 3 Transform values
Room for 3: 벽 3 트랜스폼 값
Room for 3: Wall 4 Transform values
Room for 3: 벽 4 트랜스폼 값

Room for 4

Floor Scale: 60,1,60

Room for 4: Wall 1 Transform values
Room for 4: 벽 1 트랜스폼 값
Room for 4: Wall 2 Transform values
Room for 4: 벽 2 트랜스폼 값
Room for 4: Wall 3 Transform values
Room for 4: 벽 3 트랜스폼 값
Room for 4: Wall 4 Transform values
Room for 4: 벽 4 트랜스폼 값

씬 목록 빌드 설정

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

  1. "File/Build Settings" 메뉴를 통하여 Build Settings를 오픈 합니다.
  2. 모든 신을 드래그앤 드롭 하고 launcher 씬은 리스트의 첫번째가 되도록 하면, 유니티가 기본적으로 그 씬을 로드하여 플레이어에게 보여 줄 것 입니다.
Build Settings: Scenes In Build
Build Settings: Scenes In Build
이제 기본 씬 설정을 완료 했으므로 이제 모든 것을 진행할 준비가 되었습니다. 다음 섹션에서 진행하도록 하겠습니다.

다음 파트.
이전 파트.

Back to top