๐Ÿ“˜TIL - ๋ถ‰์€ ์‚ฌ๋ง‰ ์‚ฌ๋ก€ ๊ธฐ๋ฐ˜ ์ž…๋ ฅ / ์ƒํ˜ธ์ž‘์šฉ / AI ์˜ค๋ฐœ๋™ ์ด์Šˆ ๋ถ„์„

HappyCircleยท2026๋…„ 3์›” 20์ผ

Unreal ๊ฐœ๋ฐœ

๋ชฉ๋ก ๋ณด๊ธฐ
91/163

๋ฌธ์ œ ์ธ์‹

๋ถ‰์€ ์‚ฌ๋ง‰ ๊ด€๋ จ ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ์ด์Šˆ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ  ์–ธ๋ฆฌ์–ผ ์—”์ง„์ผ ๊ฒฝ์šฐ ์–ด๋–ค์‹์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•ด์„œ ๋ถ„์„ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ณต๋ถ€๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.
ํฐ ์ด์Šˆ ์œ„์ฃผ๋กœ ๋ถ„์„์„ ํ–ˆ๋‹ค.

1. ํ‚ค๋งคํ•‘ ์ด์Šˆ

2. ๋ฌผ๋ฆฌ์  ์ƒํ˜ธ์ž‘์šฉ ์˜ค๋ฐœ๋™ ์ด์Šˆ

์ถœ์‹œ ์ดํ›„ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์„ ๋ณด๋ฉด
๋‹จ์ˆœํžˆ โ€œ์กฐ์ž‘์ด ์–ด๋ ต๋‹คโ€ ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ

  • ์ž…๋ ฅ์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•˜๋Š” ๋А๋‚Œ
  • ์ƒํ˜ธ์ž‘์šฉ ๋Œ€์ƒ์ด ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ์„ ํƒ๋˜๋Š” ๊ฒฝ์šฐ
  • NPC๋‚˜ ์ „ํˆฌ ๋Œ€์ƒ์ด ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•˜๋Š” ๋ฌธ์ œ

๊ฐ™์€ ์ผ€์ด์Šค๋“ค์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์–ธ๊ธ‰๋˜๊ณ  ์žˆ๋‹ค.

์ด๊ฑธ ๋‹จ์ˆœ UX ๋ฌธ์ œ๋ผ๊ธฐ๋ณด๋‹ค
์—”์ง„ ๋‚ด๋ถ€์—์„œ ์ž…๋ ฅ โ†’ ํŒ์ • โ†’ ๋ฐ˜์‘ ํ๋ฆ„์ด ์–ด๊ธ‹๋‚œ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹๊นŒ๋ผ๋Š” ๊ด€์ ์œผ๋กœ ์ ‘๊ทผํ•ด๋ดค๋‹ค.


์ „์ฒด ํ๋ฆ„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ”๋ผ๋ณด๊ธฐ

๋ฌธ์ œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋”ฐ๋กœ ๋ณด๊ธฐ๋ณด๋‹ค
์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ณด๋ฉด ๊ตฌ์กฐ๊ฐ€ ๋” ์ž˜ ๋ณด์˜€๋‹ค.

[Player Input]
      โ†“
[Input Interpretation]
      โ†“
[Target Selection]
      โ†“
[Action Commit]
      โ†“
[AI Reaction]
      โ†“
[Result (Player ์ฒด๊ฐ)]

์ด ์ค‘ ์–ด๋”” ํ•˜๋‚˜๋ผ๋„ ์–ด๊ธ‹๋‚˜๋ฉด
์œ ์ € ์ž…์žฅ์—์„œ๋Š” ์ „๋ถ€ โ€œ์กฐ์ž‘๊ฐ ์ด์ƒโ€์œผ๋กœ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ๋‹ค.


1. ์ž…๋ ฅ ๋‹จ๊ณ„์—์„œ์˜ ๋ฌธ์ œ ๊ฐ€๋Šฅ์„ฑ

ํ”ผ๋“œ๋ฐฑ ์ค‘ โ€œํ‚ค๊ฐ€ ์ƒํ™ฉ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๋А๊ปด์ง„๋‹คโ€๋Š” ๋ถ€๋ถ„์€
์ž…๋ ฅ ์ •์˜ ์ž์ฒด๋ณด๋‹ค ์ž…๋ ฅ ํ—ˆ์šฉ ์กฐ๊ฑด์ด ์ •๋ฆฌ๋˜์ง€ ์•Š์•˜์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.


์ถ”์ธก๋˜๋Š” ๊ตฌ์กฐ ๋ฌธ์ œ

๋ฌธ์ œ ์œ ํ˜•๋ฐœ์ƒ ๊ฐ€๋Šฅ ์›์ธ
์ž…๋ ฅ ์”นํž˜์—ฌ๋Ÿฌ Context๊ฐ€ ๋™์‹œ์— ํ™œ์„ฑํ™”
๋‹ค๋ฅธ ๋™์ž‘ ์‹คํ–‰Mapping Priority ์ถฉ๋Œ
์ƒํ™ฉ๋ณ„ ์ž…๋ ฅ ๋‹ค๋ฆ„์ƒํƒœ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ ์—†์Œ
์ด์ƒํ•œ ํƒ€์ด๋ฐ ๋ฐœ๋™Trigger ์ค‘๋ณต (Tap / Hold ๋“ฑ)

๊ตฌ์กฐ ๋น„๊ต

๊ธฐ์กด์— ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ์กฐ

Key Input
 โ”œโ”€ Attack
 โ”œโ”€ Interact
 โ”œโ”€ Dodge
 โ””โ”€ UI Confirm
โ†’ ์ƒํ™ฉ ๊ตฌ๋ถ„ ์—†์ด ์‹คํ–‰ ์‹œ๋„

๊ฐœ์„  ๋ฐฉํ–ฅ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณธ ๊ตฌ์กฐ

[Current State]
   โ”œโ”€ Exploration
   โ”œโ”€ Combat
   โ”œโ”€ Interaction
   โ””โ”€ UI
        โ†“
[Allowed Input Only]
        โ†“
[Execute Action]

์ ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹ (์–ธ๋ฆฌ์–ผ ๊ธฐ์ค€)

  • Mapping Context๋ฅผ ์ƒํƒœ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ
  • Context Priority๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜
  • ์ž…๋ ฅ ์‹คํ–‰ ์ „์— โ€œํ—ˆ์šฉ ์—ฌ๋ถ€โ€๋ฅผ ์ฒดํฌํ•˜๋Š” ๊ณ„์ธต ์ถ”๊ฐ€

๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๋ฉด

์ž…๋ ฅ โ†’ ๋ฐ”๋กœ ์‹คํ–‰ โŒ
์ž…๋ ฅ โ†’ ์ƒํƒœ ํ™•์ธ โ†’ ์‹คํ–‰ โญ•

์ด๋ ‡๊ฒŒ๋งŒ ๋ฐ”๊ฟ”๋„
ํ‚ค ์ถฉ๋Œ ๋ฌธ์ œ๋Š” ์ƒ๋‹น ๋ถ€๋ถ„ ์ค„์–ด๋“ค ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.


2. ์ƒํ˜ธ์ž‘์šฉ ์˜ค๋ฐœ๋™ ๋ฌธ์ œ ๋ถ„์„

์ด ๋ถ€๋ถ„์€ ์‹ค์ œ๋กœ ๋งŽ์ด ๊ฒช๋Š” ๋ฌธ์ œ๋ผ ๋” ์ต์ˆ™ํ•˜๊ฒŒ ๋А๊ปด์กŒ๋‹ค.

โ€œ๋ฌธ์„ ์—ด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์˜†์— ์žˆ๋Š” ์•„์ดํ…œ์ด ์„ ํƒ๋œ๋‹คโ€
โ†’ ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„ Trace ๋ฐฉ์‹ ๋ฌธ์ œ๋‹ค.


๊ธฐ์กด ๊ตฌ์กฐ (๋ฌธ์ œ ๋ฐœ์ƒ ํŒจํ„ด)

Camera Forward
      โ†“
Line Trace
      โ†“
First Hit Actor
      โ†“
Interact

์ด ๊ตฌ์กฐ๋Š” ๋‹จ์ˆœํ•˜์ง€๋งŒ
์œ ์ € ์˜๋„๋ฅผ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.


๊ฐœ์„  ๊ตฌ์กฐ๋กœ ์ถ”์ธกํ•œ ๋ฐฉ์‹

[Multi Trace]
      โ†“
[Candidate List]
      โ†“
[Filter]
 - ๊ฑฐ๋ฆฌ
 - ์‹œ์•ผ(FOV)
 - ์ƒํƒœ
      โ†“
[Score ๊ณ„์‚ฐ]
      โ†“
[Best Target ์„ ํƒ]

ํ›„๋ณด ์„ ํƒ ๊ธฐ์ค€ ์ •๋ฆฌ

์š”์†Œ์ด์œ 
๊ฑฐ๋ฆฌ๊ฐ€๊นŒ์šด ๋Œ€์ƒ์ด ๋” ์ž์—ฐ์Šค๋Ÿฝ๋‹ค
๋ฐฉํ–ฅํ™”๋ฉด ์ค‘์•™์— ์žˆ๋Š” ๋Œ€์ƒ์ด ์šฐ์„ 
์ƒํƒœ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅํ•œ ๋Œ€์ƒ๋งŒ
๊ฐ€์‹œ์„ฑ๋ฒฝ ๋’ค ๋Œ€์ƒ ์ œ๊ฑฐ

์ ์ˆ˜ ๊ธฐ๋ฐ˜ ์„ ํƒ ๊ฐœ๋…

Score =
 (๊ฑฐ๋ฆฌ ๊ฐ€์ค‘์น˜)
 + (์นด๋ฉ”๋ผ ๋ฐฉํ–ฅ ๊ฐ€์ค‘์น˜)
 + (์šฐ์„ ์ˆœ์œ„ ํƒœ๊ทธ)

์ด ๊ตฌ์กฐ๋ฅผ ์“ฐ๋ฉด
โ€œ์—‰๋šฑํ•œ ๋Œ€์ƒ ์„ ํƒโ€ ๋ฌธ์ œ๋Š” ๊ฑฐ์˜ ์ค„์–ด๋“ค ๊ฒƒ ๊ฐ™์•˜๋‹ค.


์ถ”๊ฐ€๋กœ ๋А๋‚€ ํฌ์ธํŠธ

๋ฐฉ์‹๋ฌธ์ œ
Overlap ๊ธฐ๋ฐ˜ ์„ ํƒ๋Œ€์ƒ์ด ๊ณ„์† ๋ฐ”๋€œ
๋‹จ์ผ Trace์ •ํ™•๋„ ๋ถ€์กฑ
๋‹ค์ค‘ ํ›„๋ณด + ์ ์ˆ˜์•ˆ์ •์ 

๊ฒฐ๊ตญ ํ•ต์‹ฌ์€

Hit = ์„ ํƒ โŒ
Best Candidate = ์„ ํƒ โญ•

3. NPC / AI ๋ฐ˜์‘ ๋ฌธ์ œ ๋ถ„์„

์ด๊ฑด ์ฒด๊ฐ์ด ์ œ์ผ ์–ด์ƒ‰ํ•ด์ง€๋Š” ๋ถ€๋ถ„์ด๋ผ ์ค‘์š”ํ•˜๊ฒŒ ๋ณด์˜€๋‹ค.


์ฆ์ƒ ๊ธฐ์ค€์œผ๋กœ ๋ณด๋ฉด

์ฒด๊ฐ๋‚ด๋ถ€ ๋ฌธ์ œ ์ถ”์ธก
๋‹ค๋ฅธ ์ ์ด ๋ฐ˜์‘ํƒ€๊ฒŸ ๋ถˆ์ผ์น˜
๋ฐ˜์‘์ด ๋Šฆ์ŒPerception ์ง€์—ฐ
์—‰๋šฑํ•œ ํ–‰๋™Blackboard stale

๊ตฌ์กฐ์ ์œผ๋กœ ๋ณด๋ฉด

[Client Input]
      โ†“
[Client Target]
      โ†“
(Server)
      โ†“
[Server Target Confirm]
      โ†“
[AI Blackboard]
      โ†“
[AI Behavior]

์—ฌ๊ธฐ์„œ
Client Target โ‰  Server Target ์ด ๋˜๋ฉด
์ฒด๊ฐ์ด ๋ฐ”๋กœ ๊นจ์ง„๋‹ค.


๊ฐœ์„  ๋ฐฉํ–ฅ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณธ ๊ตฌ์กฐ

Client
 - ๋Œ€์ƒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
 - UI ํ‘œ์‹œ

Server
 - ์ตœ์ข… ํƒ€๊ฒŸ ํ™•์ •
 - ์ฆ‰์‹œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ

์ค‘์š”ํ•œ ํฌ์ธํŠธ

ํ•ญ๋ชฉ์ด์œ 
์„œ๋ฒ„ ํ™•์ •ํŒ์ • ์ผ๊ด€์„ฑ
Blackboard ์ฆ‰์‹œ ๊ฐฑ์‹ AI ๋ฐ˜์‘ ์ง€์—ฐ ๋ฐฉ์ง€
ํƒ€๊ฒŸ ๊ณ ์ • ๊ตฌ๊ฐ„์ค‘๊ฐ„ ๋ณ€๊ฒฝ ๋ฐฉ์ง€

ํƒ€๊ฒŸ ๊ณ ์ • ๊ฐœ๋…

Attack Input
   โ†“
Target Snapshot ์ €์žฅ
   โ†“
Animation ์ง„ํ–‰
   โ†“
Hit ํŒ์ •

์ด๊ฑธ ์•ˆ ํ•˜๋ฉด
๊ณต๊ฒฉ ๋„์ค‘ ํƒ€๊ฒŸ์ด ๋ฐ”๋€Œ๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.


4. ๋ฌผ๋ฆฌ ์ƒํ˜ธ์ž‘์šฉ ๊ด€์ ์—์„œ ๋ณธ ๋ฌธ์ œ

์ด๊ฑด ์ž…๋ ฅ/ํƒ€๊ฒŸ ๋ฌธ์ œ๋ž‘ ๊ฐ™์ด ์—ฎ์—ฌ์žˆ๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.


๋ฌธ์ œ ๋ฐœ์ƒ ๊ตฌ์กฐ

Overlap ๋ฐœ์ƒ
 โ†’ ๋ฐ”๋กœ ์ƒํ˜ธ์ž‘์šฉ ๋Œ€์ƒ ๊ฒฐ์ •

์ด ๊ตฌ์กฐ๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ณ„์† ๋Œ€์ƒ์ด ๋ฐ”๋€๋‹ค.


๊ฐœ์„  ๋ฐฉํ–ฅ

Overlap โ†’ ํ›„๋ณด๋งŒ ํ™•๋ณด
Trace โ†’ ์ตœ์ข… ์„ ํƒ

Collision ์„ค๊ณ„๋„ ์ค‘์š”

์ฑ„๋„์—ญํ• 
Interactable์ƒํ˜ธ์ž‘์šฉ ๋Œ€์ƒ
Enemy์ „ํˆฌ ๋Œ€์ƒ
World์‹œ์•ผ ์ฐจ๋‹จ
Physics๋ฌผ๋ฆฌ ์˜ค๋ธŒ์ ํŠธ

์ฑ„๋„ ๋ถ„๋ฆฌ๊ฐ€ ์•ˆ ๋˜์–ด ์žˆ์œผ๋ฉด
Trace ๊ฒฐ๊ณผ ์ž์ฒด๊ฐ€ ๋ถˆ์•ˆ์ •ํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.


5. ์ „์ฒด ๊ตฌ์กฐ ๋‹ค์‹œ ์ •๋ฆฌ

์ด๊ฑธ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด๋ณด๋ฉด
๋ฌธ์ œ๋Š” ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ํ๋ฆ„ ๋ฌธ์ œ์˜€๋‹ค.


Before

Input โ†’ ๋ฐ”๋กœ ์‹คํ–‰
Trace โ†’ ์ฒซ Hit ์‚ฌ์šฉ
AI โ†’ Perception ์˜์กด

After (์ถ”์ธก ๊ธฐ๋ฐ˜ ๊ฐœ์„  ๊ตฌ์กฐ)

Input โ†’ ์ƒํƒœ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ
      โ†“
Target โ†’ ํ›„๋ณด + ์ ์ˆ˜ ์„ ํƒ
      โ†“
Server โ†’ ์ตœ์ข… ํ™•์ •
      โ†“
AI โ†’ ์ฆ‰์‹œ ์ƒํƒœ ๋ฐ˜์˜

๋А๋‚€ ์  (์ •๋ฆฌ)

์ด๋ฒˆ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋ฉด์„œ ๋А๋‚€ ๊ฑด
์ด ๋ฌธ์ œ๋Š” ๋‹จ์ˆœํžˆ โ€œ๋ฒ„๊ทธ๋ฅผ ๊ณ ์นœ๋‹คโ€ ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ
์„ค๊ณ„ ๋ฐฉ์‹ ์ž์ฒด๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ์ ์ด์—ˆ๋‹ค.

ํŠนํžˆ ์ธ์ƒ์ ์ด์—ˆ๋˜ ๊ฑด

  • ์ž…๋ ฅ์€ ๋งŽ์ด ๋ฐ›๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ œํ•œ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ์ 
  • ์ƒํ˜ธ์ž‘์šฉ์€ ์ •ํ™•ํ•œ ํŒ์ •๋ณด๋‹ค ์„ ํƒ ๊ธฐ์ค€์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ์ 
  • AI๋Š” ๋˜‘๋˜‘ํ•œ ๊ฒƒ๋ณด๋‹ค ํƒ€์ด๋ฐ์ด ๋งž๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ 

์•„์ง ์‹ค์ œ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋ณธ ๊ฑด ์•„๋‹ˆ์ง€๋งŒ
์ง€๊ธˆ ๋ณด์ด๋Š” ์ฆ์ƒ ๊ธฐ์ค€์œผ๋กœ ๋ณด๋ฉด
์ด ์„ธ ์ถ•์ด ๋™์‹œ์— ํ”๋“ค๋ ธ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.


์˜ค๋Š˜์˜ ์ •๋ฆฌ

  • ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ์ธก๋ฉด์—์„œ ์ค‘์š”ํ•œ ์ด์Šˆ์ธ ์กฐ์ž‘๊ฐ ๋ฌธ์ œ๋Š” ์ž…๋ ฅ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ
    ์ž…๋ ฅ โ†’ ์„ ํƒ โ†’ ๋ฐ˜์‘ ํ๋ฆ„์ด ์–ผ๋งˆ๋‚˜ ์ผ๊ด€๋˜๊ฒŒ ์ด์–ด์ง€๋А๋ƒ์˜ ๋ฌธ์ œ๋ผ๊ณ  ๋А๊ผˆ๋‹ค.
profile
๊ฐœ๋ฐœํ•ฉ์‹œ๋‹ค!

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