[TIL] 250813

๊น€์„ธํฌยท2025๋…„ 8์›” 13์ผ

โœ๏ธToday I Learned

๐Ÿ“… 2025-08-13

  • UE - ์„ฑ๋Šฅ ์ตœ์ ํ™”

UE - ์„ฑ๋Šฅ ์ตœ์ ํ™”

1๋‹จ๊ณ„ Tick

1.1 Tick์˜ ์˜ค๋ฒ„ํ—ค๋“œ
Tick: ๋งค ํ”„๋ ˆ์ž„ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜
DeltaTime: ์ด์ „ ํ”„๋ ˆ์ž„๊ณผ ํ˜„์žฌ ํ”„๋ ˆ์ž„๊ฐ„์˜ ์‹œ๊ฐ„. ํ”„๋ ˆ์ž„ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ๊ณฑํ•ด์„œ ๋ฌผ๋ฆฌ ์—ฐ์‚ฐ์„ ํ•ด์•ผํ•œ๋‹ค.
์•กํ„ฐ๋“ค์˜ Tick ํ•จ์ˆ˜๋Š” ์Œ“์ธ๋‹ค. ๋„ˆ๋ฌด ์Œ“์ด๋ฉด ๊ฒŒ์ž„ ํ”„๋ ˆ์ž„์ด ํ˜„์ €ํžˆ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

1.2 Tick ์ตœ์ ํ™”

1. ์‹คํ–‰ ๊ฐ„๊ฒฉ ์กฐ์ ˆ
๋งค ํ”„๋ ˆ์ž„ ์‹คํ–‰ํ•  ํ•„์š”์—†๋Š” ๋™์ž‘์€ Tick์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๋ณ€๊ฒฝ
ex) DeltaTime์„ ๋ˆ„์ ํ•˜์—ฌ 0.1 ์ดˆ๋ ๋•Œ๋งˆ๋‹ค ํ”Œ๋ ˆ์ด์–ด ์ฒดํฌ
๊ถŒ์žฅ ์ฃผ๊ธฐ
- ๋งค ํ”„๋ ˆ์ž„: ์ž…๋ ฅ, ์นด๋ฉ”๋ผ, ์• ๋‹ˆ๋ฉ”์ด์…˜
- 0.05: ๊ทผ์ ‘์ „ํˆฌ
- 0.1: AI, ๊ฑฐ๋ฆฌ ์ฒดํฌ
- 0.2~0.5: ๋ฏธ๋‹ˆ๋งต, ์›๊ฑฐ๋ฆฌ ์ 

2. ์ค‘๋ณต ๊ณ„์‚ฐ ์ œ๊ฑฐ
์•กํ„ฐ๋ณ„๋กœ ํ”Œ๋ ˆ์ด์–ด์™€ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ -> ๋งค๋‹ˆ์ € ํด๋ž˜์Šค์—์„œ ๊ณ„์‚ฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๊ณต์œ 

3. ๊ฑฐ๋ฆฌ๋ณ„ ์ฐจ๋“ฑ ์—…๋ฐ์ดํŠธ (LOD)
๋งค๋‹ˆ์ €์—์„œ ๊ฑฐ๋ฆฌ๋ณ„๋กœ ์ฐจ๋“ฑ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ

4. Tick Group์œผ๋กœ ์‹คํ–‰ ์ˆœ์„œ ์ตœ์ ํ™”
์•กํ„ฐ๋ณ„๋กœ Tick์„ ์–ธ์ œ ์‹คํ–‰ํ• ์ง€ ์ •ํ•˜๊ธฐ

Tick ์‹คํ–‰ ์ˆœ์„œ

[ํ”„๋ ˆ์ž„ ์‹œ์ž‘]
1. TG_PrePhysics (๋ฌผ๋ฆฌ ์ „) - ์ž…๋ ฅ, ์ด๋™ ๋ช…๋ น   
2. ๋ฌผ๋ฆฌ ์—”์ง„ ๊ณ„์‚ฐ  
3. TG_PostPhysics (๋ฌผ๋ฆฌ ํ›„) - AI, ์ถฉ๋Œ ์ฒ˜๋ฆฌ [๊ธฐ๋ณธ๊ฐ’]  
4. TG_PostUpdateWork (๋งˆ์ง€๋ง‰) - UI, ์นด๋ฉ”๋ผ
[ํ”„๋ ˆ์ž„ ๋]

2๋‹จ๊ณ„ TimerManager

Tick์„ ์•ˆ์“ฐ๋Š”๊ฒŒ ๋” ์ข‹์Œ
Timer๋Š” ํ•„์š”ํ• ๋•Œ๋งŒ ์‹คํ–‰ํ•˜๋Š” ์˜ˆ์•ฝ ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— Tick๋ณด๋‹ค CPU ๋ถ€๋‹ด๊ณผ ๊ด€๋ฆฌ ๋‚œ์ด๋„๊ฐ€ ๋‚ฎ๋‹ค.
์—ฌ๋Ÿฌ ์•กํ„ฐ์—์„œ ๋™์‹œ์— ํƒ€์ด๋จธ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ถ€ํ•˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹œ์ž‘ ์‹œ์ ๋งŒ ๋‚œ์ˆ˜๋กœ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
ํƒ€์ด๋จธ ์‚ฌ์šฉํ•  ๋–„๋Š” ๋๊นŒ์ง€ ํ•ธ๋“ค์„ ์ž˜ ๊ด€๋ฆฌํ•ด์•ผํ•œ๋‹ค.
1. TimerHandle์˜ ์•ˆ์ „ํ•œ ๊ด€๋ฆฌ

ํ•ญ์ƒ ์‚ฌ์šฉ์ „์— isvalid๋กœ ์ฒดํฌ
ํ•ธ๋“ค์„ ์ดˆ๊ธฐํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์œ ํšจํ•˜์ง€ ์•Š์€ ํ•ธ๋“ค์ด ๋‚จ์„ ์ˆ˜ ์žˆ๋‹ค.
ClearTimer ์ดํ›„ Invalidate()๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ.
Endplay์—์„œ ํ•œ๋ฒˆ์— ์ง€์šธ ์ˆ˜๋„ ์žˆ๋‹ค.

2. SetTimerForNextTick
SetTimer๋Š” ์ง€์ • ์‹œ๊ฐ„ ํ›„ ์‹คํ–‰๋˜์ง€๋งŒ SetTimerForNextTick์€ ๋‹ค์Œ ํ”„๋ ˆ์ž„์˜ ์‹œ์ž‘ ์‹œ์ ์— ์‹คํ–‰๋œ๋‹ค.
์•„์ง ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์„๋•Œ ์‹คํ–‰๋˜๋Š”๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. Lambda vs Delegate
Lambda-> ์งง๊ณ  ๊ฐ„๋‹จํ•œ ์ž‘์—…์— ์ ํ•ฉํ•˜๋‹ค. ํƒ€์ด๋จธ์—์„œ ๋žŒ๋‹ค๊ฐ€ this๋กœ ์บก์ณํ•˜๋ฉด ๊ฐ์ฒด๊ฐ€ ํŒŒ๊ดด๋œ ํ›„์—๋„ ๋žŒ๋‹ค๊ฐ€ ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
๊ฐ์ฒด๊ฐ€ ํŒŒ๊ดด๋ ๋•Œ Endplay์—์„œ ๋ชจ๋“  ํƒ€์ด๋จธ๋ฅผ ์ •๋ฆฌ
TWeakObjectPtr ์“ฐ๊ธฐ
๊ฐ์ฒด๊ฐ€ ์—†์–ด์งˆ ์œ„ํ—˜์ด ์žˆ์„๋•Œ ์‚ฌ์šฉํ• ์ˆ˜์žˆ๋Š” ํฌ์ธํ„ฐ. ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
๋žŒ๋‹ค ์“ธ ๋•Œ๋Š” ์ง์ ‘ this๋กœ ์บก์ณํ•˜๋Š” ๊ฒƒ ์ง€์–‘.
Delegate-> ๋ช…ํ™•ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์— ์œ ๋ฆฌํ•˜๋‹ค. ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์ข‹๋‹ค.

์‚ฌ์šฉ ์ฃผ์˜ํ•  ์ 

  • ์ฃผ๊ธฐ ์กฐ์ ˆ
  • ๋ชจ๋“  ํƒ€์ด๋จธ ์ข…๋ฃŒ
  • ํ•ธ๋“ค ์œ ํšจ์„ฑ ํ™•์ธ
  • ๋žŒ๋‹ค ๋‚จ์šฉ ์ฃผ์˜

3๋‹จ๊ณ„ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜

1. ํด๋ง->์ด๋ฒคํŠธ ์ „ํ™˜
ํด๋ง: ๋งคํ”„๋ ˆ์ž„ ํ˜ธ์ถœํ•˜๊ณ  ํ™•์ธ. ํŠธ๋ฆฌ๊ฑฐ ํƒ€์ด๋ฐ์„ ํด๋ง์œผ๋กœ ์žก์œผ๋ฉด ๋น„ํšจ์œจ์ ์ด๋‹ค.
์ด๋ฒคํŠธ: ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ์— ํŠธ๋ฆฌ๊ฑฐ ๋ฐœ๋™. ํŠธ๋ฆฌ๊ฑฐ ํƒ€์ด๋ฐ์„ ๋งค๋ฒˆ ํ™•์ธํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

2. Event Bus ํŒจํ„ด
์ค‘์•™ ์ง‘์ค‘ํ˜• ์ด๋ฒคํŠธ ๊ด€๋ฆฌ.
์ด๋ฒคํŠธ๋ฅผ ํ•œ ๊ณณ์—์„œ ๋ฐœํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

4๋‹จ๊ณ„ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์™€ ์Šค๋ ˆ๋“œ

๋งŽ์€ ์ž‘์—…์„ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค ์ฒ˜๋ฆฌํ•˜๋ฉด ๊ฒŒ์ž„์ด ๋ฉˆ์ถœ ์ˆ˜ ์žˆ๋‹ค.
1. ์–ธ๋ฆฌ์–ผ์˜ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๊ตฌ์กฐ์™€ ์—ญํ• 
์Šค๋ ˆ๋“œ๋ณ„ ๊ฐ€๋Šฅํ•œ ์ž‘์—…๊ณผ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ž‘์—…์ด ์žˆ์œผ๋ฏ€๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ง„ํ–‰ํ•˜์—ฌ์•ผํ•œ๋‹ค.


๐Ÿ’ก ๋А๋‚€ ์  (What I Felt)

์ด๋ฒˆ ํŒ€ํ”Œ์—์„œ๋„ ์ ์šฉํ•  ๋ถ€๋ถ„์„ ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค.


์ถœ์ฒ˜: ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

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