FCB - Advanced(2) ๐Ÿ“•

JUSTICE_DERยท2023๋…„ 2์›” 28์ผ
0

๐ŸŒตUNREAL

๋ชฉ๋ก ๋ณด๊ธฐ
19/42

Unreal Engine 5 โ€“ Full Course for Beginners
https://www.youtube.com/watch?v=6UlU_FsicK8


Character

  • BP์˜ ๊ณ„์ธต๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.
    ๊ฐ€์žฅ ๊ตฌ์ฒดํ™”๋œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๊ฒƒ์ด Character์ด๋‹ค.

  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด, charater์˜ movement mode๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

  • ๊ทธ๋ƒฅ ์ด๋ฆ„๋งŒ ๋ถ™์ธ๊ฒŒ ์•„๋‹ˆ๋ผ,
    Flying์ด๋ฉด, ๋‚  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ , Vertical์š”์†Œ์˜ ์›€์ง์ž„๋„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.
    Get Vector Up ์‚ฌ์šฉ
    ๋น—์ž๋ฃจ ์ด๋™ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด ๋น ๋ฅด๊ฒŒ ์ตํž๋“ฏํ•˜๋‹ค.

  • launch๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, character๋ฅผ ๋‚ ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
    ์œ ์‚ฌ impulse
    Jump Pad์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ทธ ์™ธ์— self๋กœ character๋ฅผ ์„ค์ •ํ•œ ๋’ค, Character ํ•จ์ˆ˜ ๋ถ€๋ถ„์„ ๋ณด๋ฉด,
    ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋“ค์ด ๋‚˜์˜จ๋‹ค.

  • Crouch๋ฅผ ํ•˜๋ฉด, Collision์ด ๋‚ฎ์•„์ง€๊ณ , ์‹œ์ ๋„ ๋‚ฎ์•„์ง€๊ณ , ์ด๋™์†๋„๋„ ๋Š๋ ค์ง€๊ฒŒ ๋œ๋‹ค.
    crouch ํ•จ์ˆ˜์˜ detail์—์„œ ์„ธ๋ถ€ ์กฐ์ •๋„ ๊ฐ€๋Šฅ

  • CPP์—์„œ ๊ฐ„๋‹จํžˆ MovementMod๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ๋‹ค.

์ง„์งœ ์™ ๋งŒํ•ด์„œ๋Š” BP์™€ CPP์˜ ํ˜ผ์šฉ์ด ๋ฌธ์ œ์—†์ด ์„ค๊ณ„๋œ ๊ฒƒ ๊ฐ™๋‹ค.
์ฐพ๊ธฐ๊ฐ€ ํž˜๋“ค๋ฟ, ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” ๋Š๋‚Œ์ด๋‹ค.


Player Controller

  • PlayerController์—์„œ๋Š” ๋งˆ์šฐ์Šค๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์ด ์กด์žฌํ•œ๋‹ค.

  • Character์—์„œ ํ‚ค๋ฐ”์ธ๋”ฉ์„ ํ•˜๊ณ , PlayerController์—์„œ๋„ ๋ฐ”์ธ๋”ฉ์„ ํ•œ๋‹ค๋ฉด,
    PlayerController๊ฐ€ ๋” ์šฐ์„ ์ˆœ์œ„๋กœ ์‹คํ–‰๋œ๋‹ค.

  • PlayerController๋Š” GameMode์™€ ๋ฐ€์ ‘ํ•˜๋‹ค.


Game Mode

  • ์œ„์˜ ์‚ฌ์ง„์—์„œ Player State Class๋Š” ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ํ•œ๋‹ค.
    ์ค‘์š”ํ•œ๊ฒƒ์€, GameMode Override์™€, Game State Class๊ฐ€
    ์ƒ๊ฐํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•˜๋‹ค.

  • ๋ชจ๋“  ๋ ˆ๋ฒจ์€ ํ•˜๋‚˜์˜ ๊ฒŒ์ž„๋ชจ๋“œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด, GameMode์—์„œ Character๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ๋‹ค.
    ํ•ด๋‹น BP๋…ธ๋“œ๋“ค์€ BP_NewCharacter๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •ํ•˜๊ณ ,
    BP_Character๋กœ ๋ฐ”๊พธ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
    ์‹ฑ๊ธ€ํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„์—์„œ๋Š” ํ•ญ์ƒ Player Controller์ธ๋ฑ์Šค๊ฐ€ 0์ธ๋“ฏ

  • ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์—์„œ์˜ ๊ธฐ๋Šฅ๋„ ๊ฒŒ์ž„๋ชจ๋“œ์—์„œ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


Game State

  • BP๋กœ GameStateBase๋ฅผ ๋ˆŒ๋Ÿฌ ์ƒ์„ฑํ•œ๋‹ค.

  • ๊ธฐ๋ณธ gamestate๋ฅผ BP_GameState๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ์ ์šฉ๋œ๋‹ค.
    ๊นŒ๋จน์ง€ ๋ง๊ฒƒ

  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ ๋‹ค.
    ๊ตณ์ด GameState์—์„œ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋ถ€๋ถ„์ธ๊ฑฐ ๊ฐ™์€๋ฐ ์™œ ์—ฌ๊ธฐ์— ๋งŒ๋“ค์ง€

  • ํ•ด๋‹น ๊ธฐ๋Šฅ์€ BeginPlay๊ฐ€ ๋˜๋ฉด, ํ•จ์ˆ˜๋ฅผ Time๋งˆ๋‹ค ๋ฐ˜๋ณตํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค. Looping ์ฒดํฌํ•ด์•ผํ•จ
    ํ•ด๋‹น ํ•จ์ˆ˜๋Š” TimerPlus๋กœ ์ง€์—ˆ๊ณ , ๊ทธ๋ƒฅ ์ด๋ฒคํŠธ์˜ ์ด๋ฆ„์ด๋‹ค.
    ํ˜ธ์ถœ๋˜๋ฉด Timer๋ผ๋Š” int ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ++๋œ๋‹ค.

์ฆ‰ ์‹ค์ œ๋กœ 1์ดˆ๋งˆ๋‹ค Timer๋ณ€์ˆ˜์˜ ๊ฐ’์ด 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  BP_HUD์— ์‹œ๊ฐ„์„ ๋„์šฐ๋ ค๊ณ  ํ•œ๋‹ค. Text๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.
    ๋ณ€์ˆ˜๋ช… ์˜†์— is Variable ์ฒดํฌํ•ด์•ผํ•œ๋‹ค.

  • HUD๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฑด BP_PlayerController์˜€๊ณ ,
    ์—ฌ๊ธฐ์„œ ์ง์ ‘ timer int๊ฐ’์„ ๋ฐ›์•„์„œ ๋„์šฐ๋ ค๊ณ  ํ•œ๋‹ค.

  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œ์ž‘ํ•œ๋‹ค.
    Time Update๋ผ๋Š” event๋ฅผ ์ด๋ฆ„์ง€์–ด๋‘๊ณ ,
    ํ•ด๋‹น ์ด๋ฒคํŠธ์— input์œผ๋กœ ๋“ค์–ด์˜จ int๊ฐ’์„ ์กฐ๋ฆฌํ•˜์—ฌ TimerText์˜ Text๋ฅผ ์„ค์ •ํ•œ๋‹ค.
    ์กฐ๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 60์œผ๋กœ ๋‚˜๋ˆ ์„œ Min์œผ๋กœ,
    ๋‚˜๋จธ์ง€๋ฅผ Sec์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ,
    Sec์ด 10๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, ์•ž์— 0์„ ๋ถ™์—ฌ์„œ 2์ž๋ฆฌ์ฒ˜๋Ÿผ ๋‚˜์˜ค๋„๋ก ํ•œ๋‹ค.

  • ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์ฃผ๋ชฉํ•ด์•ผํ•  ๊ฒƒ์€ Select์ด๋‹ค.
    ๊ธฐ์กด Branch๋กœ if๋ฌธ์„ ๋‹ค๋ฃฌ๋‹ค๋ฉด, ํฐ์ƒ‰ ํ•€์œผ๋กœ ์‹คํ–‰์ˆœ์„œ๊ฐ€ ๊ฒฐ์ •๋˜์–ด์•ผ๋งŒ ํ•˜๋Š”๋ฐ,
    Select๋กœ ํ•˜๋ฉด, ํ•ด๋‹น ๊ฐ’์ด True์ธ์ง€ False์ธ์ง€์— ๋”ฐ๋ผ์„œ
    ๋ฐ˜ํ™˜ํ•  ๊ฐ’์ด ์ •ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋Ÿฐ๊ฒฝ์šฐ select๋กœ ๊น”๋”ํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

  • ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

ํ•˜๋‚˜ ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€, ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค.
None์ธ ๊ฒฝ์šฐ, ๋ณดํ†ต ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ ์ „์„ ์˜๋ฏธํ•˜๊ณ ,
๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๋ถ€๋ถ„์„ GetValid๋กœ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋‹จ์ˆœํ•œ ๊ฒ€์ฆ์ž‘์—…์„ ํ†ตํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

  • ์ถ”๊ฐ€๋กœ, ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด ๊ฒŒ์ž„์˜ ๊ฒฝ์šฐ, ํ•ด๋‹น Timer๋Š” player index 0๋งŒ ๋ณด์ด๊ฒŒ ๋œ๋‹ค.
    ๊ทธ๋ž˜์„œ ์•„๋ž˜์ฒ˜๋Ÿผ Player Array๋ฅผ Loop๋ฅผ ๋Œ๋ฉฐ, ์„ค์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๋“ฏ

Game Instance

  • Game Mode๋Š” ๋ ˆ๋ฒจ๋‹น ํ•˜๋‚˜๊ฐ€ ๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค.
    ๊ทธ ์ด์œ ๋Š”, Game Mode๊ฐ€ ๋ ˆ๋ฒจ์— ์ข…์†๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ณ ,
    Game Mode๋กœ BP๋ฅผ ๋งŒ๋“ค๊ณ , ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ’์„ ์•„๋ฌด๋ฆฌ ์ €์žฅํ•ด๋„,
    ๋‹ค์Œ ๋ ˆ๋ฒจ๋กœ ๊ฐ€๋ฉด, ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๊ฐ’์€ ์ดˆ๊ธฐํ™”๋˜๊ณ , BeginPlay๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค.

  • Game Instance๋Š” ํ”Œ๋ ˆ์ด์–ด ๋‹น ํ•˜๋‚˜๊ฐ€ ์กด์žฌํ•œ๋‹ค.
    ๊ฒŒ์ž„์ด ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰ํ•˜๊ณ , ๋๋‚ ๋•Œ ์‚ฌ๋ผ์ง„๋‹ค.
    ๋ ˆ๋ฒจ์ด ๋ฐ”๋€Œ์–ด๋„ ๊ฐ’์€ ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค.

  • ์„ธ์ด๋ธŒ๋กœ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜, outside-๋„คํŠธ์›Œํ‚น ๊ฐ™์€ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ instance์— ์ฃผ๋กœ ๋„ฃ๋Š”๋‹ค.
    ์ธ๊ฒŒ์ž„ ๋„คํŠธ์›Œํ‚น(rpc)์€ ๊ตณ์ด ๋„ฃ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ํ•œ๋‹ค.
    ์•„์ง ๋ญ”๋ง์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Œ

  • ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์˜ ๊ฒฝ์šฐ, Game Mode์™€ Game State ๋“ฑ์€ ๊ณต์œ ํ•˜์ง€๋งŒ,
    Game Instance๋Š” ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

profile
Time Waits for No One

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