๐Ÿ“˜TIL - ์—๋Ÿฌ ๋กœ๊ทธ ๋งํ’์„  ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌํ˜„

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

Unreal ๊ฐœ๋ฐœ

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

๋ฌธ์ œ

๊ธฐ์กด ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ์—์…‹ ํฌํ•จ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์„ค๊ณ„๋งŒ ๋˜์–ด ์žˆ์—ˆ๊ณ ,
์‹ค์ œ ๊ธฐ๋Šฅ์€ ๊ฑฐ์˜ ์—†๋Š” ์ƒํƒœ์˜€๋‹ค.

์ •๋ฆฌํ•˜๋ฉด ์ด๋Ÿฐ ์ƒํƒœ์˜€๋‹ค.

  • ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชจ๋“ˆ ๊ตฌ์กฐ๋งŒ ๋งŒ๋“ค์–ด์ง„ ์ƒํƒœ
  • ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ฝ˜ํ…์ธ (์—์…‹)๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๋ฐฉ์‹๋งŒ ์„ค๊ณ„๋จ
  • ๋งํ’์„  UI ์—†์Œ
  • ์บ๋ฆญํ„ฐ ์—ฐ๋™ ์—†์Œ
  • ๋กœ๊ทธ์™€ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ ์—†์Œ
  • ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด๋„ ์ •๋ฆฌ๋˜์ง€ ์•Š์Œ

๊ทธ๋ž˜์„œ ๋‹จ์ˆœํžˆ UI ํ•˜๋‚˜ ๋งŒ๋“œ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ,

ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‚ด๋ถ€์— ์ฝ˜ํ…์ธ ๋ฅผ ํฌํ•จํ•˜๊ณ 
๊ทธ๊ฑธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” "๋กœ๊ทธ ๋งํ’์„  ์‹œ์Šคํ…œ"์„ ์‹ค์ œ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ๋ชฉํ‘œ์˜€๋‹ค.


๋ถ„์„

1. ๋‹จ์ˆœ WidgetComponent ๋ฐฉ์‹์€ ํ•œ๊ณ„๊ฐ€ ๋ช…ํ™•ํ–ˆ๋‹ค

์ฒ˜์Œ์—๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ
"์บ๋ฆญํ„ฐ์— WidgetComponent ๋ถ™์ด๊ณ  ํ…์ŠคํŠธ๋งŒ ๋ฐ”๊พธ๋ฉด ๋˜์ง€ ์•Š๋‚˜?"
๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๊ตฌ์กฐ๋กœ ๋ณด๋ฉด ์ด๋Ÿฐ ํ˜•ํƒœ๋‹ค.

Character
 โ””โ”€ WidgetComponent
      โ””โ”€ Text Widget

๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ฐ”๋กœ ๋ฌธ์ œ๊ฐ€ ๋ณด์˜€๋‹ค.

  • ์บ๋ฆญํ„ฐ ์ฝ”๋“œ์— ๋กœ์ง์ด ๋ฐ•ํž˜
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ์กฐ๋ž‘ ์—ฐ๊ฒฐ์ด ์•ฝํ•จ
  • ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์›€
  • ์Šคํƒ€์ผ ๊ต์ฒด๊ฐ€ ๋ฒˆ๊ฑฐ๋กœ์›€
  • ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ์—ฐ๊ฒฐ์ด ๊ณ„์† ๋ฐ˜๋ณต๋จ

๊ฒฐ๋ก ์ ์œผ๋กœ
์ด๊ฑด โ€œ์ž„์‹œ UIโ€ ์ˆ˜์ค€์ด์ง€ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ์กฐ๋กœ ๋ณด๊ธฐ์—” ๋ถ€์กฑํ–ˆ๋‹ค.


2. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ฒฐ๊ตญ โ€œ์ฝ”๋“œ + ์ฝ˜ํ…์ธ  ๋ถ„๋ฆฌโ€๊ฐ€ ํ•ต์‹ฌ์ด์—ˆ๋‹ค

์˜ค๋Š˜ ๊ตฌ์กฐ๋ฅผ ์žก์œผ๋ฉด์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ์ •๋ฆฌ๋œ ํฌ์ธํŠธ๋Š” ์ด๊ฑฐ์˜€๋‹ค.

์ฝ”๋“œ๊ฐ€ ์—์…‹์„ ์ง์ ‘ ๋“ค๊ณ  ์žˆ์œผ๋ฉด ์•ˆ ๋˜๊ณ 
์„ค์ • ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์ฐธ์กฐํ•ด์•ผ ํ•œ๋‹ค

๊ทธ๋ž˜์„œ ๊ตฌ์กฐ๋ฅผ ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆด๋‹ค.

[Plugin Content]
 - ๋งํ’์„  ์œ„์ ฏ
 - ์Šคํƒ€์ผ DataAsset

[Plugin Source]
 - SpeechComponent
 - Log BPLibrary
 - Settings

์ด๋ ‡๊ฒŒ ๋ถ„๋ฆฌํ•˜๋‹ˆ๊นŒ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ •๋ฆฌ๋๋‹ค.

  • UI๋Š” ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์—์„œ ์ˆ˜์ •
  • ๋กœ์ง์€ C++์—์„œ ์ œ์–ด
  • ์Šคํƒ€์ผ์€ DataAsset์œผ๋กœ ๊ด€๋ฆฌ

3. ๋งํ’์„ ์„ โ€œUIโ€๊ฐ€ ์•„๋‹ˆ๋ผ โ€œ๋กœ๊ทธ ์ถœ๋ ฅ ๋ฐฉ์‹โ€์œผ๋กœ ๋ณด๋Š” ๊ฒŒ ๋” ์ž์—ฐ์Šค๋Ÿฌ์› ๋‹ค

๊ตฌํ˜„ ๋ฐฉํ–ฅ์„ ์žก์œผ๋ฉด์„œ ๊ฐ€์žฅ ํฌ๊ฒŒ ๋ฐ”๋€ ๋ถ€๋ถ„์ด ์ด๊ฑฐ์˜€๋‹ค.

์ฒ˜์Œ์—๋Š”
โ€œ์บ๋ฆญํ„ฐ ์œ„์— ๋งํ’์„ ์„ ๋„์šด๋‹คโ€ ์˜€๋Š”๋ฐ,

์ •๋ฆฌํ•˜๋‹ค ๋ณด๋‹ˆ ๋” ๋งž๋Š” ๊ตฌ์กฐ๋Š” ์ด๊ฑฐ์˜€๋‹ค.

๋กœ๊ทธ ์‹œ์Šคํ…œ
 โ”œโ”€ Output Log
 โ”œโ”€ Screen Debug
 โ””โ”€ Speech Bubble

์ฆ‰ ๋งํ’์„ ์€ ํ•˜๋‚˜์˜ UI๊ฐ€ ์•„๋‹ˆ๋ผ
๋กœ๊ทธ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ถœ๋ ฅ ์ฑ„๋„ ์ค‘ ํ•˜๋‚˜๋กœ ๋ณด๋Š” ๊ฒŒ ๋” ์ž์—ฐ์Šค๋Ÿฌ์› ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ฐ”๊พธ๋‹ˆ๊นŒ ํ™•์žฅ์ด ์‰ฌ์›Œ์กŒ๋‹ค.

  • ๊ฐ™์€ ๋กœ๊ทธ๋ฅผ OutputLog์—๋„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Œ
  • ScreenDebug๋„ ๊ฐ™์ด ์ถœ๋ ฅ ๊ฐ€๋Šฅ
  • ํŠน์ • ์•กํ„ฐ์—๊ฒŒ๋งŒ ์ถœ๋ ฅ ๊ฐ€๋Šฅ
  • ํƒ€์ž…๋ณ„ ์Šคํƒ€์ผ ์ ์šฉ ๊ฐ€๋Šฅ

4. ๊ตฌ์กฐ๋ฅผ ์ •๋ฆฌํ•˜๋ฉด์„œ ํ•„์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋ช…ํ™•ํ•ด์กŒ๋‹ค

์ตœ์ข…์ ์œผ๋กœ ํ•„์š”ํ•œ ์š”์†Œ๋Š” ์ด๋ ‡๊ฒŒ ์ •๋ฆฌ๋๋‹ค.

๊ตฌ์„ฑ์—ญํ• 
BPLibrary์™ธ๋ถ€์—์„œ ๋กœ๊ทธ ํ˜ธ์ถœ
SpeechComponent๋งํ’์„  ์‹ค์ œ ์ถœ๋ ฅ
Widget BaseUI ๋ฒ ์ด์Šค
DataAsset์Šคํƒ€์ผ ๊ด€๋ฆฌ
DeveloperSettings๊ธฐ๋ณธ ์„ค์ •
Widget BP์‹ค์ œ UI ํ‘œํ˜„

ํ•ด๊ฒฐ

1. ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •๋ฆฌ

Plugins/
 โ””โ”€ MySpartaLog/
     โ”œโ”€ Source/
     โ””โ”€ Content/
  • Source โ†’ ๋กœ์ง
  • Content โ†’ ์—์…‹

์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ„๋Š” ๊ฒŒ ๊ฐ€์žฅ ๊น”๋”ํ–ˆ๋‹ค.


2. DataAsset ์ค‘์‹ฌ ๊ตฌ์กฐ๋กœ ํ™•์ •

ํ•ต์‹ฌ ํ๋ฆ„์€ ์ด๋ ‡๊ฒŒ ์žก์•˜๋‹ค.

DataAsset
  โ†“
SpeechComponent
  โ†“
WidgetComponent
  โ†“
Widget

์ด ๊ตฌ์กฐ์˜ ์žฅ์ ์€ ๋ช…ํ™•ํ–ˆ๋‹ค.

  • ์œ„์ ฏ ๊ต์ฒด ์‰ฌ์›€
  • ์Šคํƒ€์ผ ๋ณ€๊ฒฝ ์‰ฌ์›€
  • ์ฝ”๋“œ ์ˆ˜์ • ์ตœ์†Œํ™”
  • ํ”„๋กœ์ ํŠธ๋ณ„ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ

3. ์บ๋ฆญํ„ฐ ์ง์ ‘ ์ˆ˜์ • ๋Œ€์‹  Component ๋ฐฉ์‹ ์ ์šฉ

Character
 โ””โ”€ SpeechComponent

์ด ๋ฐฉ์‹์ด ์ข‹์€ ์ด์œ ๋Š” ๋ช…ํ™•ํ–ˆ๋‹ค.

  • NPC / ํ”Œ๋ ˆ์ด์–ด ๋ชจ๋‘ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์บ๋ฆญํ„ฐ ์ฝ”๋“œ ์˜ค์—ผ ์—†์Œ
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ต์ฒด ์‰ฌ์›€

4. BPLibrary๋กœ โ€œ๋กœ๊ทธ โ†’ ๋งํ’์„ โ€ ํ๋ฆ„ ํ†ตํ•ฉ

Blueprint
 โ†“
Log ํ•จ์ˆ˜ ํ˜ธ์ถœ
 โ†“
SpeechComponent
 โ†“
๋งํ’์„  ์ถœ๋ ฅ

์ด ๊ตฌ์กฐ๋กœ ๋ฐ”๊พธ๋ฉด์„œ

  • ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ์‚ฌ์šฉ์„ฑ์ด ์ข‹์•„์กŒ๊ณ 
  • ๋ฐ˜๋ณต ๋…ธ๋“œ ์—ฐ๊ฒฐ์ด ์ค„์–ด๋“ค์—ˆ๋‹ค

5. ๋กœ๊ทธ ํƒ€์ž… ๋„์ž…

Info / Warning / Error

์ด๊ฑธ ๋‚˜๋ˆ„๋‹ˆ๊นŒ

  • ์ƒ‰์ƒ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ
  • ์˜๋ฏธ ์ „๋‹ฌ์ด ๋ช…ํ™•ํ•ด์ง
  • UI ํ™•์žฅํ•˜๊ธฐ ์‰ฌ์›Œ์ง

6. ๋งํ’์„  ๋ฐฉํ–ฅ ๋ฌธ์ œ ํ•ด๊ฒฐ

World Space ์œ ์ง€ + ์นด๋ฉ”๋ผ ๋ฐ”๋ผ๋ณด๊ฒŒ ์ฒ˜๋ฆฌ

Tick
 โ†’ ์นด๋ฉ”๋ผ ๋ฐฉํ–ฅ ๊ณ„์‚ฐ
 โ†’ Widget ํšŒ์ „

์ด ๋ฐฉ์‹์ด ๊ฐ€์žฅ ์ž์—ฐ์Šค๋Ÿฌ์› ๋‹ค.


7. UI๋Š” ์ „๋ถ€ Widget BP๋กœ ์œ„์ž„

  • C++ โ†’ ์–ธ์ œ ๋„์šธ์ง€
  • Component โ†’ ์–ด๋””์— ๋„์šธ์ง€
  • DataAsset โ†’ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ• ์ง€
  • Widget โ†’ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€

์ด๋ ‡๊ฒŒ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒŒ ๊ฐ€์žฅ ๊น”๋”ํ–ˆ๋‹ค.


8. ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ํŒจํ„ด ์ •๋ฆฌ

์œ ํ˜•์˜๋ฏธ
Cast ์‹คํŒจํƒ€์ž… ๋ถˆ์ผ์น˜
IsValid ์‹คํŒจ์ฐธ์กฐ ์—†์Œ
Branch False์กฐ๊ฑด ๋ฏธ์ถฉ์กฑ

์ด๊ฑธ ๋กœ๊ทธ ํƒ€์ž…์ด๋ž‘ ์—ฐ๊ฒฐํ•ด์„œ ์“ฐ๋Š” ๊ฒŒ ์ œ์ผ ๊น”๋”ํ–ˆ๋‹ค.


9. Widget ์ง์ ‘ ์ ‘๊ทผ ๋Œ€์‹  Component API๋กœ ์ œํ•œ

๋ฌธ์ œ์˜€๋˜ ๋ถ€๋ถ„:

์™ธ๋ถ€์—์„œ ์œ„์ ฏ ์ง์ ‘ ๊ฑด๋“œ๋ฆผ โ†’ ์ ‘๊ทผ ์ œํ•œ / ๊ฒฐํ•ฉ๋„ ์ฆ๊ฐ€

ํ•ด๊ฒฐ ๋ฐฉ์‹:

์™ธ๋ถ€
 โ†“
Component ํ•จ์ˆ˜ ํ˜ธ์ถœ
 โ†“
Component ๋‚ด๋ถ€์—์„œ Widget ์ฒ˜๋ฆฌ

์ด๊ฒŒ ํ›จ์”ฌ ์•ˆ์ •์ ์ด์—ˆ๋‹ค.


์ตœ์ข… ๊ตฌ์กฐ

Blueprint
 โ†“
BPLibrary
 โ†“
SpeechComponent
 โ†“
WidgetComponent
 โ†“
Widget BP

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

์˜ค๋Š˜ ์ž‘์—…์€ ๋‹จ์ˆœํžˆ ๋งํ’์„ ์„ ๊ตฌํ˜„ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ,
ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ตฌ์กฐ + ์ฝ˜ํ…์ธ  ์—์…‹ + ์ปดํฌ๋„ŒํŠธ + ๋กœ๊ทธ ์‹œ์Šคํ…œ์„ ์—ฐ๊ฒฐํ•ด์„œ
์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์„ค๊ณ„ ๋ฐฉํ–ฅ์„ ํ™•์ •ํ•œ ์ž‘์—…์ด์—ˆ๋‹ค.

profile
๊ฐœ๋ฐœํ•ฉ์‹œ๋‹ค!

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