[UE5] ๐Ÿš€ Project Galaga (1)

Singery00ยท2024๋…„ 5์›” 21์ผ
0

Project Galaga

๋ชฉ๋ก ๋ณด๊ธฐ
1/15
post-thumbnail

๊ฐœ์š”

๐Ÿš€ Project Galaga ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Unreal C++๊ณผ ๊ฒŒ์ž„์ˆ˜ํ•™์„ ์ ‘๋ชฉํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

2024.05.04 ~ 2024.05.21์˜ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„์œผ๋กœ, ์ด 17์ผ ๋™์•ˆ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ฑฐ์ฐฝํ•˜๊ฒŒ ์‹œ์ž‘ํ•œ ํ”„๋กœ์ ํŠธ๋ณด๋‹จ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๊ฒƒ๋“ค์„ ์ข…ํ•ฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค์–ด ๋‚ด๋ณด๊ฒ ๋‹ค๋Š” ๋งˆ์Œ์œผ๋กœ ์™„์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ์‹œ๋ฆฌ์ฆˆ์—๋Š” ๊ฐœ๋ฐœ ์ผ์ง€๋ฅผ ์ •๋ฆฌํ•˜๋ฉฐ, ๊ฐœ๋ฐœ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ์ด์Šˆ๋ฅผ ์ •๋ฆฌํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๐Ÿš€ Project Galaga Github Repository


๋ณธ๋ก 


๐Ÿค” ๊ธฐํš ์˜๋„

Unreal ์—”์ง„์„ ๋ฐฐ์šฐ๋ฉฐ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณ„ํšํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ์ธ์ƒ ์–ธ๋ฆฌ์–ผ ๊ต๊ณผ์„œ์˜ ์ €์ž์ด์‹  ์ด์˜ํ˜ธ ๊ฐ•์‚ฌ๋‹˜์˜ ํŠน๊ฐ•์„ ๋“ค์œผ๋ฉฐ ๊ฒŒ์ž„ ์ˆ˜ํ•™์— ๋Œ€ํ•ด์„œ ์งง๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฒŒ์ž„ ์ˆ˜ํ•™์„ ์ ‘๋ชฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์žฅ๋ฅด๋กœ ๊ฐœ๋ฐœํ•  ์ง€ ๊ณ ๋ฏผํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ตœ์ข…์ ์œผ๋กœ ๊ฐ„๋‹จํ•˜๋˜, ์ˆ˜ํ•™์  ์š”์†Œ๋ฅผ ์ ‘๋ชฉํ•  ์ˆ˜ ์žˆ๋Š” ํƒ„๋ง‰ ์ŠˆํŒ… ๊ฒŒ์ž„์œผ๋กœ ๊ฒฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ 1945, ๋ฒŒ๋ ˆ๊ณต์ฃผ ๋“ฑ๊ณผ ๊ฐ™์€ ์œ ๋ช…ํ•œ ๋ ˆํผ๋Ÿฐ์Šค ๊ฒŒ์ž„๋“ค์ด ๋งŽ์•˜๊ธฐ์— ๊ฐœ๋ฐœ์— ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ŠˆํŒ… ๊ฒŒ์ž„ ๊ณ„๋ณด์—์„œ ๋นผ๋†“์„ ์ˆ˜ ์—†๋Š” ๊ฐค๋Ÿฌ๊ทธ๊ฐ€ ๋– ์˜ฌ๋ž๊ณ , Project Galaga๋กœ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“ ๊ณ„ํš

๊ฐœ๋ฐœ ๊ณ„ํš์„ ๋จผ์ € ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ธ์› ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ฐฉ์‹

๋ธ”๋ฃจํ”„๋ฆฐํŠธ, C++ ๋ณ‘ํ–‰

์šฐ์„  C++๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Blueprint๋Š” ๊ต์œก๊ณผ์ • ์ค‘ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋กœ ์ง„ํ–‰์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์ด์˜€์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์€ C++๋กœ ๋ชจ๋‘ ๊ตฌํ˜„ํ•˜๋˜ ์ดํŽ™ํŠธ, ์‚ฌ์šด๋“œ, ์œ„์ ฏ ์ž‘์—…๋งŒ Blueprint๋กœ ์ž‘์—…์„ ํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ์ง„ํ–‰

๊ฒŒ์ž„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Stage๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ”Œ๋ ˆ์ด๋ฉ๋‹ˆ๋‹ค.

ํ˜„ Stage์˜ ์ ์„ ๋ฌผ๋ฆฌ์น˜๋ฉด ์ตœ์ข…์ ์œผ๋กœ Stage์˜ ๋ณด์Šค๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
๋ณด์Šค๋ฅผ ์ฒ˜์น˜ํ•˜๋ฉด Stage๋ฅผ ํด๋ฆฌ์–ดํ•˜๊ณ  ๋‹ค์Œ ์Šคํ…Œ์ด์ง€๋ฅผ ํ”Œ๋ ˆ์ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ตฌํ˜„

์ผ๋ฐ˜์ ์œผ๋กœ ์ŠˆํŒ…๊ฒŒ์ž„์€ ๊ฐ ์Šคํ…Œ์ด์ง€ ๋ณ„๋กœ ๋žœ๋ค์ ์ธ ์š”์†Œ๊ฐ€ ์ ์—ˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ๋ชฌ์Šคํ„ฐ๋“ค๋„ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ณ ์ •๋œ ํŒจํ„ด์œผ๋กœ ๋‚˜ํƒ€๋‚˜ ๋‹ค์ค‘ ํ”Œ๋ ˆ์ด ์‹œ ๊ณต๋žต์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ C++๋กœ ์–ธ์ œ, ๋ˆ„๊ฐ€, ์–ด๋””์„œ, ์–ด๋–ป๊ฒŒ๋ผ๋Š” ์กฐ๊ฑด์œผ๋กœ ํŒจํ„ด์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ดํ›„ C++ Class๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑํ•œ BP_Enemy๋ฅผ ๋ ˆ๋ฒจ์— ๋ฐฐ์น˜ํ•˜๊ณ  ๊ฐ’๋งŒ ๋„ฃ์–ด ์ค€๋‹ค๋ฉด ํ•ด๋‹น ํŒจํ„ด์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํ”Œ๋ ˆ์ด์–ด

ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ํ•„์š”ํ•œ ์š”์†Œ๋“ค์€ ์žˆ์„๊ฑด ์žˆ์œผ๋˜, ๊ณผํ•˜์ง€ ์•Š๊ฒŒ๊ฐ€ ๋ชจํ† ์˜€์Šต๋‹ˆ๋‹ค.

์›€์ง์ž„

WASD๋กœ ์ƒํ•˜์ขŒ์šฐ ์กฐ์ž‘์„ ๊ณ„ํšํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ณต๊ฒฉ

โ†‘ ํ™”์‚ดํ‘œ๋กœ ๊ณต๊ฒฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์•„์ดํ…œ

์ดˆ๊ธฐ์— ์•„์ดํ…œ์€ ํƒ€ ๊ฒŒ์ž„์„ ๋ ˆํผ๋Ÿฐ์Šค ์‚ผ์•„ ํ™œ์„ฑํ™”๋œ ๋ชจ๋“  ์ด์•Œ์„ ์ง€์šฐ๋Š” ํญํƒ„๋งŒ์„ ์ƒ๊ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ๊ฐ•์‚ฌ๋‹˜๊ป˜์„œ ํ”Œ๋ ˆ์ด ํ›„ "ํ•„์‚ด๊ธฐ๋„ ์žˆ์œผ๋ฉฐ ์ข‹๊ฒ ๋‹ค" ๋ผ๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์—…๊ทธ๋ ˆ์ด๋“œ

ํ”Œ๋ ˆ์ด์–ด๋Š” ํŠน์ •์ ์„ ์ฒ˜์น˜ํ•˜๋ฉด ๊ณต๊ฒฉ๋ ฅ, ๊ณต๊ฒฉ์†๋„, ์ด์•Œ ๊ฐœ์ˆ˜ ์ฆ๊ฐ€์˜ 3๊ฐ€์ง€๋ฅผ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์  ์ข…๋ฅ˜

์ ์€ ์›€์ง์ž„ ํŒจํ„ด๊ณผ ๊ณต๊ฒฉ ํŒจํ„ด, ํฌ์ปค์Šค 3๊ฐ€์ง€์— ๋Œ€ํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ์›€์ง์ผ์ง€์™€ ์–ด๋–ป๊ฒŒ ๊ณต๊ฒฉํ• ์ง€์— ๋Œ€ํ•ด์„œ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์›€์ง์ž„ ํŒจํ„ด

์ดˆ๊ธฐ ๊ตฌ์ƒํ•œ ์›€์ง์ž„ ํŒจํ„ด์€

  1. ๊ณ ์ •ํ˜• (Fixed)
  2. ์ˆœํšŒํ˜• (Patrol)
  3. ์žํญํ˜• (Suiside)
  4. ํŒจ์Šคํ˜• (PassBy)
  5. ๋ฌด์ž‘์œ„ํ˜• (Random)

์œผ๋กœ ์ด 5๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ์ถ”๊ฐ€์ ์ธ ์›€์ง์ž„ ํŒจํ„ด์ด ํ•„์š”ํ•˜์˜€๊ณ , ์ถœ์ž…ํ˜• (InOut)์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ณต๊ฒฉ ํŒจํ„ด

๊ณต๊ฒฉ ํŒจํ„ด์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์žํญํ˜• (Suiside)
  2. ์ „๋ฐฉํ˜• (Front)
  3. ๋Œ€์ƒํ˜• (Target)
  4. ํ™•์‚ฐํ˜• (Spread)
  5. ๊ถค๋„ํ˜• (Orbit)
  6. ์ฆ‰๋ฐœํ˜• (Laser)
  7. ํŒŒ๋„ํ˜• (Wave)

๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ตฌํ˜„์„ ๋๋‚ด๊ณ  ๋‚˜๋‹ˆ '์ ์ด ํ”Œ๋ ˆ์ด์–ด์™€ ๋™์ผํ•œ ๊ณต๊ฒฉ์„ ํ•˜๋ฉด ์žฌ๋ฏธ์žˆ๊ฒ ๋‹ค' ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด ๊ฐ๋„ํ˜• (Angle)์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํฌ์ปค์Šค

์ ์ด ์•ž๋งŒ ๋ณด๋Š” ๊ฒƒ ๋ณด๋‹ค ํฌ์ปค์Šค์— ๋”ฐ๋ผ ๊ฒŒ์ž„์— ์—ญ๋™์ ์ธ ๋Š๋‚Œ์„ ์ค„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  1. ์ฃผ์‹œํ˜• (Player)
  2. ๋ชฉํ‘œ์ง€์ ํ˜• (TargetMP)
  3. ์ „๋ฐฉํ˜• (Front)

๋กœ 3๊ฐ€์ง€๋ฅผ ์ƒ๊ฐํ–ˆ์œผ๋‚˜ ๊ฐœ๋ฐœ ์ค‘ ๋” ๋””ํ…Œ์ผํ•˜๊ฒŒ ๊ตฌ๋ถ„์„ ํ•  ํ•„์š”์„ฑ์„ ๋Š๋ผ๊ณ , ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๋” ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  1. ํ›„๋ฐฉํ˜• (Back)
  2. ์ค‘์•™ํ˜• (Center)
  3. ์ตœ์ดˆ์ฃผ์‹œํ˜• (PlayerOne)

๋งˆ๋ฌด๋ฆฌ

ํ”„๋กœ์ ํŠธ ๊ธฐํš๊ณผ ๊ณ„ํš์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ดํ›„ ๊ฐ ๊ฐœ๋ฐœ ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

profile
๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž

0๊ฐœ์˜ ๋Œ“๊ธ€