Unity/RTS

Navigation Mesh

sehunbang 2025. 10. 4. 19:15

๐Ÿ”น ํŠน์ง•

  • ๊ธธ์ฐพ๊ธฐ์šฉ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
    • Terrain / Collider ๊ทธ๋Œ€๋กœ ์“ฐ์ง€ ์•Š๊ณ ,
    • ์บ๋ฆญํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ๊ฑธ์„ ์ˆ˜ ์žˆ๋Š” ์˜์—ญ๋งŒ ์ถ”์ถœํ•ด ๋งŒ๋“  ํด๋ฆฌ๊ณค ๋„คํŠธ์›Œํฌ
    • ํฌํ•จ: ๊ณ„๋‹จ, ์–ธ๋•
    • ์ œ์™ธ: ๋ฒฝ, ์ ˆ๋ฒฝ, ์žฅ์• ๋ฌผ ์œ„
  • ๊ฒฝ๋กœ ํƒ์ƒ‰
    • A* / Dijkstra ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰
    • NavMesh ์œ„์—์„œ ๋ชฉ์ ์ง€๊นŒ์ง€ ์ตœ์  ๊ฒฝ๋กœ ๊ณ„์‚ฐ
    • ์บ๋ฆญํ„ฐ๋Š” ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋™
  • ๋™์  ์ฒ˜๋ฆฌ
    • ์žฅ์• ๋ฌผ ์ด๋™, ๋ฌธ ์—ด๋ฆผ/๋‹ซํž˜ → NavMesh Obstacle ๋กœ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ

๐Ÿ”น ์™œ ํ•„์š”ํ•œ๊ฐ€?

  • ๋‹จ์ˆœ Grid ๊ธฐ๋ฐ˜ ๊ฒฝ๋กœ ํƒ์ƒ‰ → ๋ถ€์ •ํ™•, ๋น„ํšจ์œจ์ 
  • NavMesh → ๊ณต๊ฐ„์„ ์ตœ์ ํ™”๋œ Polygon์œผ๋กœ ํ‘œํ˜„
    • โœ… ๋น ๋ฅธ ๊ฒฝ๋กœ ๊ณ„์‚ฐ
    • โœ… ๋ถ€๋“œ๋Ÿฌ์šด ์›€์ง์ž„

๐Ÿ”น ํ™œ์šฉ ์˜ˆ์‹œ

  • RTS → ์œ ๋‹›๋“ค์ด ์„œ๋กœ ๋ง‰ํžˆ์ง€ ์•Š๊ณ  ์ตœ๋‹จ๊ฑฐ๋ฆฌ ์ด๋™
  • RPG/์•ก์…˜ → NPC๊ฐ€ ์žฅ์• ๋ฌผ ํ”ผํ•ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋™
  • ์Šคํ…”์Šค ๊ฒŒ์ž„ → AI๊ฐ€ ๋ฒฝ/๊ตฌ์กฐ๋ฌผ ํšŒํ”ผํ•˜๋ฉฐ ํ”Œ๋ ˆ์ด์–ด ์ถ”์ 

๐Ÿ‘‰ ์ •์˜

NavMesh = "์บ๋ฆญํ„ฐ๊ฐ€ ๋‹ค๋‹ ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์„ ํด๋ฆฌ๊ณค์œผ๋กœ ํ‘œํ˜„, AI๊ฐ€ ๊ธธ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ"

๐Ÿ’ฐ NavMesh์—์„œ Cost ๊ฐœ๋…

๐Ÿ”น ๊ธฐ๋ณธ ์›๋ฆฌ

  • A* ํƒ์ƒ‰ ์‹œ ๋น„์šฉ(cost) = ์ด๋™ ๊ฑฐ๋ฆฌ + ์•ž์œผ๋กœ ์˜ˆ์ƒ ๊ฑฐ๋ฆฌ
  • ๊ฐ€์žฅ ์ด ๋น„์šฉ์ด ๋‚ฎ์€ ๊ฒฝ๋กœ ์„ ํƒ

๐Ÿ”น NavMesh ํŠนํ™”๋œ Cost

  • ์˜์—ญ๋งˆ๋‹ค ๋‹ค๋ฅธ Cost ๋ถ€์—ฌ ๊ฐ€๋Šฅ
    • ๊ธธ (Default) → cost = 1
    • ํ’€์ˆฒ → cost = 2 (๋А๋ฆฌ๊ฒŒ, ๊ธฐํ”ผ)
    • ์œ„ํ—˜ ์ง€์—ญ(๋ถˆ/๋Šช/๋…) → cost = 5 (๋˜๋„๋ก ํ”ผํ•จ)
    • ๋ฒฝ/์ ˆ๋ฒฝ → cost = (์ด๋™ ๋ถˆ๊ฐ€)

๐Ÿ‘‰ ์˜ˆ์‹œ:

  • ํ’€์ˆฒ ๊ฐ€๋กœ์งˆ๋Ÿฌ 10m (cost ๋†’์Œ)
  • ๋Œ์•„๊ฐ€์„œ 15m (cost ๋‚ฎ์Œ)
  • → AI๋Š” ๋Œ์•„๊ฐ€๋Š” ๊ธธ ์„ ํƒ

๐Ÿ”น Unity NavMesh Cost

  • NavMesh Area ์‚ฌ์šฉ
  • Area ๋ณ„ cost multiplier ์„ค์ • ๊ฐ€๋Šฅ
 
int grassArea = NavMesh.GetAreaFromName("Grass"); NavMesh.SetAreaCost(grassArea, 2.0f); // ํ’€์ˆฒ์€ ๋น„์šฉ 2๋ฐฐ

๐Ÿ”น Unreal NavMesh Cost

  • NavModifierVolume ์œผ๋กœ ์˜์—ญ ์ง€์ •
  • AreaClass ๋ณ„ ๋น„์šฉ ์„ค์ •
AreaClassCost
UNavArea_Default 1.0
UNavArea_LowCost 0.5
UNavArea_HighCost 2.0
UNavArea_Null/Block

๐Ÿ“ ์ตœ์ข… ์š”์•ฝ

  • NavMesh = ์บ๋ฆญํ„ฐ ์ด๋™ ๊ฐ€๋Šฅ ์˜์—ญ์˜ ํด๋ฆฌ๊ณค ๋ฐ์ดํ„ฐ
  • Cost = AI๊ฐ€ ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•  ๋•Œ ์ฐธ๊ณ ํ•˜๋Š” ๊ฐ€์ค‘์น˜
  • ๊ฐ’์ด ํด์ˆ˜๋ก → ํšŒํ”ผ / ๊ฐ’์ด ์ž‘์„์ˆ˜๋ก → ์„ ํ˜ธ
  • ๋‹จ์ˆœ ๊ฑฐ๋ฆฌ๋ฟ ์•„๋‹ˆ๋ผ ์œ„ํ—˜๋„, ์†๋„, ์ „๋žต์  ์„ ํƒ๊นŒ์ง€ ๋ฐ˜์˜ ๊ฐ€๋Šฅ