[Unity Multiplayer] Boss Room 게임 분석 - 1. 프로젝트 구조

Danna 다나·2022년 8월 12일
0
post-thumbnail

유니티는 Multiplayer 게임을 지원하기 위해 Netcode for GameObjects라는 걸 지원하고 있는데,
데모 프로젝트인 Boss Room이라는 게임도 함께 만들어두었습니다.
물론, 깃허브에 소스코드도 모두 공개해주었습니다.

유니티로 멀티플레이를 처음 구현해보는 사람에게는 교과서같은 프로젝트입니다.

유니티를 공부할 때 Docs나 강의, 책을 보고 공부하는 것도 좋지만, 가끔은 이렇게 잘 만들어진 소스코드 전체를 확인하면서 흐름을 잡아가는 것도 좋아 보입니다.

이 보스룸 프로젝트를 분석해 도움이 될 만하거나 흥미로운 지점들을 계속해서 써내려 갈 예정인데,
이 포스팅에서는 프로젝트의 가장 기본이 되는 구조부터 뜯어보겠습니다.

글을 읽기 전에 실제로 게임을 한 판 하고 오시면 이해에 도움이 됩니다.
2P 이상 참여해야 플레이가 가능합니다. (한 명이 버튼 누르고 문 열어줄 때 나머지 한 명이 문을 통과해야 함)


Assets 폴더

Assets 폴더는 씬, 개발자가 작성한 소스코드, 프리팹이 모두 모여 있는 폴더입니다.
유니티 개발을 하면 대부분의 작업은 이 Assets 폴더 안에서 하게 됩니다.

전체 파일의 구조는 아래와 같지만, 너무 방대하니 조금씩 잘라서 설명하겠습니다.


.
├── Animations
│   └── UI
├── Fonts
├── GameData
│   ├── Action
│   │   ├── Archer
│   │   ├── Boss
│   │   ├── General
│   │   ├── Imp
│   │   ├── Mage
│   │   ├── Rogue
│   │   ├── Tank
│   │   └── VandalImp
│   ├── Avatars
│   ├── Character
│   │   ├── Archer
│   │   ├── Imp
│   │   ├── ImpBoss
│   │   ├── Mage
│   │   ├── Rogue
│   │   ├── Tank
│   │   └── VandalImp
│   ├── Collections
│   ├── Game
│   │   ├── EnemySpawner
│   │   └── SpawnedEnemy
│   ├── GameEvents
│   ├── Shared
│   ├── Systems
│   ├── Transforms
│   └── UI
├── Material
│   ├── Characters
│   │   └── Toon
│   └── Dungeon
├── Models
│   ├── Animated
│   └── Animation Controllers
├── Prefabs
│   ├── Actions
│   ├── CharGFX
│   │   ├── CharacterGraphics
│   │   │   └── CharacterSelect
│   │   └── Head
│   ├── Character
│   ├── Dungeon
│   │   └── Dungeon Pieces
│   │       ├── animated
│   │       ├── crystal
│   │       ├── pillar
│   │       └── pots
│   ├── Game
│   │   └── StaticNetworkObjects
│   ├── GameCam
│   ├── Menus
│   ├── State
│   └── UI
├── Scenes
│   ├── BossRoom
│   └── PostGame
├── Scripts
│   ├── ApplicationLifecycle
│   │   └── Messages
│   ├── Audio
│   ├── CameraController
│   ├── Editor
│   │   └── Readme
│   ├── Gameplay
│   │   ├── Action
│   │   ├── Configuration
│   │   ├── ConnectionManagement
│   │   ├── DebugCheats
│   │   ├── GameState
│   │   ├── GameplayObjects
│   │   │   ├── AnimationCallbacks
│   │   │   ├── Audio
│   │   │   ├── Character
│   │   │   │   └── AI
│   │   │   └── RuntimeDataContainers
│   │   ├── Input
│   │   ├── Messages
│   │   └── UI
│   │       └── Lobby
│   ├── Infrastructure
│   │   ├── PubSub
│   │   └── ScriptableObjectArchitecture
│   │       └── Editor
│   ├── Navigation
│   ├── UnityServices
│   │   ├── Auth
│   │   ├── Infrastructure
│   │   │   └── Messages
│   │   └── Lobbies
│   │       └── Messages
│   ├── Utils
│   │   └── NetworkOverlay
│   └── VisualEffects
├── Shaders
├── Sounds
│   ├── Character
│   │   ├── Archer
│   │   ├── Boss
│   │   ├── Imp
│   │   ├── Mage
│   │   ├── Rogue
│   │   ├── Shared
│   │   └── Tank
│   ├── Env
│   └── Music
├── StreamingAssets
├── Tests
│   └── Runtime
├── TextMesh Pro
│   ├── Documentation
│   ├── Fonts
│   ├── Resources
│   │   ├── Fonts & Materials
│   │   ├── Sprite Assets
│   │   └── Style Sheets
│   ├── Shaders
│   └── Sprites
├── Textures
│   ├── Characters
│   ├── Environment
│   └── UI
│       └── Unity
├── URP
│   └── Mobile
└── VFX
    ├── Materials
    ├── Meshes
    ├── Prefabs
    │   ├── Archer
    │   ├── Boss
    │   ├── Caster
    │   ├── Environment
    │   ├── Imp
    │   │   └── Throw_bomb
    │   ├── Rogue
    │   ├── Shared Hero FX
    │   ├── Tank
    │   └── UI
    ├── Shaders
    └── Textures

다른 걸 다 잘라내고 Assets 하위에 위치한 폴더만 살펴보면,
Assets 폴더의 하위는 아래와 같은 서브 폴더들로 구성되어 있습니다.

.
├── Animations
├── Fonts
├── GameData
├── Material
├── Models
├── Prefabs
├── Scenes
├── Scripts
├── Shaders
├── Sounds
├── StreamingAssets
├── Tests
├── TextMesh Pro
├── Textures
├── URP
└── VFX

대중적인 구조에서 크게 벗어나지 않는 파일 구조를 가지고 있습니다.
게임 씬 저장을 위한 Scenes,
스크립트 저장을 위한 Scripts,
프리팹 저장을 위한 Prefabs, 등등 ...
익숙한 구조입니다.

TextMesh Pro가 익숙하지 않으시다면, 기존의 유니티 UI 텍스트를 완벽히 대체하며 더 고도화된 기능을 제공하는 플러그인이고,
(원래는 유니티 에셋 스토어에서 유료로 팔고 있던 에셋인데 유니티에서 인수해 무료로 제공하게 되었다고 합니다.)

이어지는 글에서 프로젝트 구조를 하나하나 뜯어 살펴보겠습니다.

profile
요즘은 https://welcometodannas.tistory.com/에 더 많은 글을 씁니다.

0개의 댓글