Develop document : Sound System - Tiny-Metro/Poly-Metro GitHub Wiki

๊ฐœ์š”

TinyMetro ํ”„๋กœ์ ํŠธ์˜ ์†Œ๋ฆฌ (๋ฐฐ๊ฒฝ, ํšจ๊ณผ์Œ)์€ SoundManager ํด๋ž˜์Šค์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฌธ์„œ๋Š” SoundManager ๋ฐ ๊ทธ์™€ ๊ด€๋ จ๋œ ๊ฐ’์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

์šฉ์–ด ์ •๋ฆฌ

ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ ํ•  ํšจ๊ณผ์Œ์˜ ์šฉ์–ด์— ๋Œ€ํ•œ ์ •๋ฆฌ์ž…๋‹ˆ๋‹ค.

๋ฌธ์„œ ๋ฐ ํ•œ๊ธ€ ์šฉ์–ด -> ํ”„๋กœ์ ํŠธ ๋ณ€์ˆ˜๋ช…
๋ฐฐ๊ฒฝ ์Œ์•… BGM
์—ญ ์ƒ์„ฑ ์•Œ๋ฆผ StationSpawn
๊ธฐ์ฐจ ๋ฐฐ์น˜ SpawnTrain
๊ฐ์ฐจ ๋ฐฐ์น˜ SpawnSubtrain
๊ธฐ์ฐจ ์—…๊ทธ๋ ˆ์ด๋“œ TrainUpgrade
์—ญ ์—…๊ทธ๋ ˆ์ด๋“œ StationUpgrade
์ด๋ฒคํŠธ ๋ฐœ์ƒ OccurEvent
๋ฉ”๋‰ด ๋ฒ„ํŠผ / ์ƒ์  ๋“ฑ ๋ฒ„ํŠผ ํด๋ฆญ ButtonClick
์ƒ์  <-> ์€ํ–‰ <-> ์ •์ฑ… ๋“ฑ ํƒญ๊ฐ„ ์ด๋™ TabMove
์ •์ง€ Pause
์žฌ์ƒ Unpause

ํ•ด๋‹น ๋ณ€์ˆ˜๋ช…์€ TinyMetroEffectSound enum class์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํšจ๊ณผ์Œ ํ˜ธ์ถœ ์œ„์น˜

๊ฐ๊ฐ์˜ ํšจ๊ณผ์Œ์€ ๋‹ค์Œ ์œ„์น˜์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํšจ๊ณผ์Œ ์ข…๋ฅ˜ -> ํ˜ธ์ถœ ์œ„์น˜
์—ญ ์ƒ์„ฑ ์•Œ๋ฆผ StationManager::SpawnStation
๊ธฐ์ฐจ ๋ฐฐ์น˜ Train::ServiceStart
๊ฐ์ฐจ ๋ฐฐ์น˜ Subtrain::ServiceStart
๊ธฐ์ฐจ ์—…๊ทธ๋ ˆ์ด๋“œ TrainTemplate::Upgrade
์—ญ ์—…๊ทธ๋ ˆ์ด๋“œ Station::Upgrade
์ด๋ฒคํŠธ ๋ฐœ์ƒ TinyMetroEventManager::OccurEvent
๋ฉ”๋‰ด ๋ฒ„ํŠผ / ์ƒ์  ๋“ฑ ๋ฒ„ํŠผ ํด๋ฆญ []
์ƒ์  <-> ์€ํ–‰ <-> ์ •์ฑ… ๋“ฑ ํƒญ๊ฐ„ ์ด๋™ []
์ •์ง€ []
์žฌ์ƒ []

๋ฐฐ์น˜

SoundManager๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ ˆ๋ฒจ์— ๋ฐฐ์น˜ํ•  ์‹œ, ๋‹ค์Œ ์‚ฌํ•ญ์ด ๊ณ ๋ ค๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Game Level์ด ์•„๋‹ ๊ฒฝ์šฐ

ํƒ€์ดํ‹€ ๋“ฑ์˜ Game Level์ด ์•„๋‹ ๊ฒฝ์šฐ, ๋ ˆ๋ฒจ์— ์ง์ ‘ SoundManager๋ฐ SaveManager๊ฐ€ ๋ฐฐ์น˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Game Level์ผ ๊ฒฝ์šฐ

Game Level์ผ ๊ฒฝ์šฐ, GameMode์—์„œ SoundManager๋ฅผ ์ž๋™์œผ๋กœ ์Šคํฐํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ, ๋ ˆ๋ฒจ์— SoundManager๋ฅผ ๋ฐฐ์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

SoundManager ๊ฐ€์ ธ์˜ค๊ธฐ

SoundManager๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Game Level์ด ์•„๋‹ ๊ฒฝ์šฐ

ํƒ€์ดํ‹€ ๋“ฑ์˜ Game Level์ด ์•„๋‹ ๊ฒฝ์šฐ, UGameplayStatics::GetActorOfClassํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

Game Level์ผ ๊ฒฝ์šฐ

Game Level์ผ ๊ฒฝ์šฐ, SoundManager๋Š” GameMode์— ์˜ํ•ด ์Šคํฐ๋ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ, GameMode์˜ GetSoundManagerํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ๋ฐ ์‚ฌ์šฉ

SoundManager๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํƒ€์ดํ‹€ BGM ์žฌ์ƒ

ํ˜„์žฌ ๋ ˆ๋ฒจ์ด ํƒ€์ดํ‹€ ๋ ˆ๋ฒจ์ผ ๊ฒฝ์šฐ, ์ž๋™์œผ๋กœ ํƒ€์ดํ‹€ BGM์„ ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ž„ BGM ์žฌ์ƒ

ํ˜„์žฌ ๋ ˆ๋ฒจ์ด ๊ฒŒ์ž„ ๋ ˆ๋ฒจ์ผ ๊ฒฝ์šฐ, ์ž๋™์œผ๋กœ ๊ฒŒ์ž„ BGM์„ ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค.
BGM์€ ๋žœ๋ค์œผ๋กœ ์„ ํƒ๋˜์–ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์žฌ์ƒ๋ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ํšจ๊ณผ์Œ ์žฌ์ƒ

๊ฒŒ์ž„ ํšจ๊ณผ์Œ์€ ํŠน์ • ์ƒํ™ฉ์— ๋งž๊ฒŒ ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

void SoundManager::PlaySound(TinyMetroEffectSound)

์ž…๋ ฅ enum์— ํ•ด๋‹นํ•˜๋Š” ์‚ฌ์šด๋“œ๋ฅผ ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ๊ฒฝ์Œ ๋ฐ ํšจ๊ณผ์Œ ํฌ๊ธฐ ์กฐ์ ˆ

๋ฐฐ๊ฒฝ์Œ ๋ฐ ํšจ๊ณผ์Œ์˜ ํฌ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

void SoundManager::SetMasterVolume(float)
void SoundManager::SetBackgroundVolume(float)
void SoundManager::SetEffectVolume(float)

๋˜ํ•œ, ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ๋ฐฐ๊ฒฝ์Œ ๋ฐ ํšจ๊ณผ์Œ์˜ ๊ฐ’์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

float SoundManager::GetMasterVolume()
float SoundManager::GetBackgroundVolume()
float SoundManager::GetEffectVolume()

Master volume์˜ ๊ฒฝ์šฐ, Background ๋ฐ Effect๋ชจ๋‘์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.
์ตœ์ข…์ ์ธ Background ๋ฐ Effect๊ฐ’์€ ๊ฐ๊ฐ์˜ ๊ฐ’์— Master volume์˜ ๊ฐ’์ด ๊ณฑํ•ด์ ธ์„œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ