파트 3 - 게임 신
이 섹션에서는 플레이어들이 플레이 하는 여러 신을 생성 하는 것을 다루게 됩니다.
각 신은 특정 플레이어 수로 지정되며 플레이어 수가 많아지면 더 커져서 플레이어들이 움직일 수 있는 공간을 제공 합니다.
이 튜토리얼의 아래에서는 플레이어 수에 따른 적정한 레벨을 로드하는 로직을 구현 할 것 이며 다음의 형식으로 레벨에 대해서 명명 할 것 입니다:
"Room for X" X 는 플레이어 숫자를 나타냅니다.
첫 번째 룸 생성
- 새로운 신을 생성하여 정확히 `"Room for 1"로 저장 합니다.
- 큐브를 생성하여 이름을
floor
로 합니다. - Position 은 0,0,0 으로 합니다. 플레이어를 중심부 위 (0,x,0) 에 스폰하는 것이 우리 로직 시스템에서 중요 합니다.
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
라고 하는 프리팹을 생성하고 현재 룸에 참여중인 로컬 플레이어가 룸에서 빠져 나올 수 있도록 하는 작업을 할 것 입니다.
- C# 스크립트
GameManager
를 생성 합니다. - 신에서 빈 게임 오브젝트를 생성하여
Game Manager
로 이름을 변경 합니다. GameManager
스크립트를Game Manager
게임오브젝트에 드래그 합니다.Game Manager
를 프리팹으로 변경하기 위해 Hierarachy 에서 드래그하여 Assets Browser 로 끌어 놓으면 Hierarchy 에서 파란색으로 변경됩니다.GameManager
스크립트를 편집 합니다.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 을 프리팹으로 만들어서 재활용 하고 나중에 다시 사용할 수 있도록 하는 것이 합리적일 것입니다.
Room for 1
신에 있는지 확인 해주세요.- 유니티 메뉴 'GameObject/UI/Panel' 에서 UI Panel 을 생성하여
Top Panel
로 이름을 부여 합니다. - 이 Panel 에서
Image
와Canvas Renderer
컴포넌트를 제거 합니다. 보기에 나쁘지 않으면 그대로 유지 해도 좋습니다. Shift
와Alt
를 누른 상태로 수직 Anchor Presets 를top
으로 수평 anchor preset 은stretch
로 설정 합니다.
RectTransform Anchors 사용하려면 약간의 경험이 필요하지만 그만한 가치가 있습니다 :)RectTransform
높이를 50 으로 설정 합니다.- Panel GameObject 를 우클릭하여
Top Panel
UI/Button 을 추가하고Leave button
으로 이름을 변경 합니다. Leave button
의 차일드 텍스트를 선택 하고 텍스트를Leave Game
으로 변경 합니다.- OnClick button의 이벤트와 Hierarchy 의
Game Manager
인스턴스를 연결하여LeaveRoom()
을 호출 하도록 합니다.
다른 룸들 생성
하나의 룸을 맞게 생성 했으므로 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로 모든 신들을 추가하여 유니티가 어플리케이션을 빌드 할 때 추가 하도록 해야 합니다.
- "File/Build Settings" 메뉴를 통하여 Build Settings를 오픈 합니다.
- 모든 신을 드래그앤 드롭 하고 launcher 신은 리스트의 첫번째가 되며 유니티가 기본적으로 그 신을 로드하여 플레이어에게 보여 줄 것 입니다.
이제 기본 신 설정을 완료 했으므로 이제 모든 것을 진행할 준비가 되었고 다음 섹션에서 진행하도록 하겠습니다.
Back to top