ScrollChat BP Implement

์ •ํ˜œ์ฐฝยท2025๋…„ 3์›” 25์ผ

๋…ํ•™

๋ชฉ๋ก ๋ณด๊ธฐ
26/28
post-thumbnail

๐ŸŽฎ Default Setting

PlayerControllerActorComponentGameModeSetting

  • BP_ChatPlayerController ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  GameMode ์„ค์ •์„ ํ•œ๋‹ค. AC_Chat_PC๋Š” ActorComponent๋กœ PlayerController์˜ Component๋กœ ์„ค์ •ํ•œ๋‹ค.



๐ŸŽฎ Widget

WBP_ChatBox, WBP_ChatEntry, WBP_ChatUI๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

1๏ธโƒฃ WBP_ChatBox

๐Ÿ“Œ ๊ตฌ์„ฑ์š”์†Œ

  • Size Box
    • ์ž์‹ ์œ„์ ฏ์˜ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ๊ณ ์ •์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ
    • ๋ณดํ†ต ์ฑ„ํŒ… ๋ฐ•์Šค์˜ ํฌ๊ธฐ๋ฅผ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ.
  • Vertical Box
    • ์—ฌ๋Ÿฌ ์œ„์ ฏ๋“ค์„ ์ˆ˜์ง ๋ฐฉํ–ฅ ์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ
    • ์—ฌ๊ธฐ์„œ๋Š” ScrollBox_58, EditableText_151์ด ์ˆ˜์ง์œผ๋กœ ๋ฐฐ์น˜๋˜์–ด ์žˆ๋‹ค.
  • ScrollBox_58
    • ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ฑ„ํŒ… ๋ฉ”์„ธ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ํ‘œ์‹œํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ.
    • ์ƒˆ๋กœ์šด ์ฑ„ํŒ… ๋ฉ”์„ธ์ง€๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ํ•ด๋„ ์Šคํฌ๋กค์„ ํ†ตํ•ด ์ด์ „ ๋ฉ”์„ธ์ง€ ํ™•์ธ ๊ฐ€๋Šฅ.
  • EditableText_151
    • ์‚ฌ์šฉ์ž๊ฐ€ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์ ฏ.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ฑ„ํŒ… ์ž…๋ ฅ์ฐฝ ์—ญํ• ์„ ํ•จ.
    • ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์•„ Enter ํ‚ค ๋“ฑ์˜ ์ด๋ฒคํŠธ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•˜๊ฒŒ ๋งŒ๋“ฆ.

๐Ÿ“Œ Focus Chat(Function)

  • Set User Focus

    • ์ฑ„ํŒ… ์ž…๋ ฅ์ฐฝ์— ํฌ์ปค์Šค๋ฅผ ์ฃผ๊ฒŒํ•จ (Ediable Text -> SetUserFocus)
    • ํฌ์ปค์Šค๋ฅผ ์ค„ ๋Œ€์ƒ์„ Get Player Controller์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜ด.
    • ์–ด๋–ค UI์— ํฌ์ปค์Šค๋ฅผ ์ค„ ๊ฒƒ์ธ๊ฐ€? Target : Editable Text 151
  • Set Is Enabled

    • ์ฑ„ํŒ… ์ž…๋ ฅ์ฐฝ์„ ํ™œ์„ฑํ™” ์ƒํƒœ๋กœ ์„ค์ •
    • ๋น„ํ™œ์„ฑ ์ƒํƒœ๋ฉด ํฌ์ปค์Šค ์•ˆ๋จนํž˜.
  • ํ™œ์„ฑํ™” ๋˜๋ฉด Chat Focused (Bool Variable) True ๋กœ ์„ค์ •.

๐Ÿ‘‰ ์™ธ๋ถ€์—์„œ Focus Chat ํ•จ์ˆ˜๊ฐ€ Called ๋˜๋ฉด ์‹คํ–‰๋˜๋Š” ๋กœ์ง (Enter Key Pressed) Focus, Enable ์„ค์ •

๐Ÿ“Œ Exit Chat(Function)

  • Chat Focused (Bool Variable) False ๋กœ ์„ค์ •

  • SetText๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ž…๋ ฅ์นธ ๋น„์šฐ๊ธฐ.

  • Set Is Enabled ๋น„ํ™œ์„ฑํ™”

  • Set Input Mode Game Only ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž…๋ ฅ์ด ์™„๋ฃŒ๋˜๋ฉด Focus๋ฅผ ๋„๊ณ  ๊ฒŒ์ž„ ๋ชจ๋“œ๋กœ ์ „ํ™˜

๐Ÿ‘‰ ์™ธ๋ถ€์—์„œ Exit Chat ํ•จ์ˆ˜๊ฐ€ Called ๋˜๋ฉด ์‹คํ–‰๋˜๋Š” ๋กœ์ง. Focus Chat๊ณผ ๋ฐ˜๋Œ€.

๐Ÿ“Œ Scroll(Function)

  • Scroll ์— Input(๋งค๊ฐœ๋ณ€์ˆ˜)๋กœ Up(Bool Variable)๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • Select Float์„ ํ†ตํ•ด Up์ด True ๋ฉด A๋ฅผ Excute / Up์ด False๋ฉด B๋ฅผ Excute

    • A์™€ B์— 1, -1 ์„ ๋„ฃ์–ด์„œ ๋งˆ์šฐ์Šค ์Šคํฌ๋กค์˜ ๊ตด๋ฆฌ๋Š” ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ์Šคํฌ๋กค ๋ฐ”๊ฐ€ ๋ฐฉํ–ฅ์ด ์ „ํ™˜๋˜๊ฒŒ ํ•จ.

๐Ÿ‘‰ ๋งˆ์šฐ์Šค ์Šคํฌ๋กค์„ ํ•  ๋•Œ Scroll ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ์„œ Set Scroll Offset๋ฅผ ํ†ตํ•ด Scroll์˜ ์œ„์น˜๋ฅผ ์ „ํ™˜

๐Ÿ“Œ AddChatMessage

  • AddChatMessage (Custom Event)

    • ์™ธ๋ถ€์—์„œ ์ฑ„ํŒ…์„ Commit ํ•˜๋ฉด Called ํ•จ์ˆ˜
    • Message๋ผ๋Š” String์„ Input(๋งค๊ฐœ๋ณ€์ˆ˜)๋กœ ๋ฐ›์•„์„œ ๋™์ž‘์„ ์‹œ์ž‘
  • Create Widget (WBP_ChatEntry)

    • ์ฑ„ํŒ… ํ•œ ์ค„์„ ํ‘œํ˜„ํ•˜๋Š” Widget ์ƒ์„ฑ
    • Message
      • ํ…์ŠคํŠธ๋ฅผ ์œ„์ ฏ ์ƒ์„ฑ ์‹œ์— ์ „๋‹ฌ (WBP_ChatEntry->Message(bool valualbe)์˜ Expose on Spawn ์˜ต์…˜ ๋•๋ถ„์— ๋ฉ”์„ธ์ง€ ๋„˜๊ธฐ๋Š”๊ฒŒ ๊ฐ€๋Šฅ
  • Add Child (Target: Scroll Box)

    • Scroll Box๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ Child Wiget์„ Vertical ํ˜น์€ Horizon์œผ๋กœ Alignmentํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ
    • Add Child๋กœ ์ƒˆ๋กœ ๋งŒ๋“  Message Wiget์„ Child Wiget์œผ๋กœ ์ถ”๊ฐ€
  • Scroll to End

    • ์ด ๋…ธ๋“œ๋Š” Scroll Box๋ฅผ ์ž๋™์œผ๋กœ ๋งจ ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•จ
    • ์ตœ์‹ ์˜ Message๋ฅผ ๋ณด์ด๋„๋ก ์ž๋™์œผ๋กœ ์Šคํฌ๋กค
    • ์•ˆ ํ•˜๋ฉด ์ƒˆ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถ”๊ฐ€๋˜๋”๋ผ๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์Šคํฌ๋กคํ•ด์•ผ ๋ณผ ์ˆ˜ ์žˆ์Œ โ†’ UX ์•ˆ ์ข‹์Œ

๐Ÿ‘‰ ๋ฌธ์ž์—ด(Message)์„ ๋ฐ›์•„์„œ โ†’ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์œ„์ ฏ์„ ์ƒ์„ฑํ•˜๊ณ  โ†’ Scroll Box์— ์ถ”๊ฐ€ํ•˜๊ณ  โ†’ ์ž๋™์œผ๋กœ ๋งจ ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•ด์„œ ์ตœ์‹  ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ด๋„๋ก ํ•จ.

๐Ÿ“Œ Event Graph

  • Widget์ด ํ˜•์„ฑ๋˜๋ฉด GetPlayerController -> Get Component by Class (AC_Chat_PC)
  • Promote Value -> Set Chat PC Component Ref

  • OnTextCommitted (EditableText_151)

    • ์ฑ„ํŒ… ์ž…๋ ฅ์ฐฝ์—์„œ Text๊ฐ€ Commit ๋์„ ๋•Œ ์‹คํ–‰
    • Text
      • ์ž…๋ ฅ๋œ ํ…์ŠคํŠธ
    • Commit Method
      • Commit ๋ฐฉ์‹(์—ฌ๊ธฐ์„  On Enter) (Equal Enum)
  • Branch 1

    • Enter๋กœ Commit ๋  ๊ฒฝ์šฐ True ์‹คํ–‰
  • ๋งŒ์•ฝ ์ฑ„ํŒ…์ด ๋น„์—ˆ์„ ๊ฒฝ์šฐ (Is Empty == True)

    • Sequence์˜ Then1 ์ด ์‹คํ–‰๋˜๋ฉด์„œ Exit Chat
  • ์ฑ„ํŒ…์ด ์žˆ๋Š” ๊ฒฝ์šฐ (Is Empty == false)

    • Chat PC Component Ref(AC_Chat_PC) ์˜ Send Chat Message On Server ์ด๋ฒคํŠธ ์‹คํ–‰
    • ์ฑ„ํŒ… ์ž…๋ ฅ ์‹œ ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด PlayerState๋ฅผ ๊ฐ€์ ธ์™€์„œ Get Player Name ์ดํ›„ Append

๐Ÿ‘‰ ์ฑ„ํŒ…์ž…๋ ฅ ์‹œ Enter๋กœ Commit, ์ฑ„ํŒ…์ด ๋น„๋ฉด Exit Chat ํ˜ธ์ถœ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ActorComponent Send Chat Message on Server ํ˜ธ์ถœ


2๏ธโƒฃ WBP_ChatEntry

๐Ÿ“Œ ๊ตฌ์„ฑ์š”์†Œ

  • WBP_ChatBox์˜ ScrollBox์— Text๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” WBP_ChatEntry๋ฅผ ๋งŒ๋“  ๊ฒƒ.
  • EditableText์—์„œ ์ž…๋ ฅ๋œ Message๋ฅผ ๋ฐ›์•„์„œ ScrollBox์— ๊ฐฑ์‹ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Text๋ฅผ ๋ฐ›์•„์„œ ์ถœ๋ ฅ์„ ํ•˜๋Š” SetText๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” Text Block์„ ์‚ฌ์šฉ.
  • Details ํŒจ๋„์—์„œ AutoWrapText ํ™œ์„ฑํ™”.
    • ๋ฌธ์žฅ์ด ๊ธธ์–ด์ง€๋ฉด ์ž๋™์œผ๋กœ ์ค„ ๋ฐ”๊ฟˆ์„ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ

๐Ÿ“Œ Event Graph

  • Event Construct

    • ์œ„์ ฏ์ด ์ƒ์„ฑ๋˜๊ณ  ํ™”๋ฉด์— ์ฒ˜์Œ ๋‚˜ํƒ€๋‚  ๋•Œ ํ•œ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ์ดˆ๊ธฐํ™” ์ด๋ฒคํŠธ.
      C++๋กœ ๋”ฐ์ง€๋ฉด NativeConstruct() ํ•จ์ˆ˜
  • Message

    • Instance Editable
      • ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋‚˜ ์—๋””ํ„ฐ๋‚˜ ๋””ํ…Œ์ผ ํŒจ๋„์—์„œ ํ•ด๋‹น ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Œ
    • Expose on Spawn
      • ๋ธ”๋ฃจํ”„๋ฆฐํŠธ์—์„œ ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ๋ฅผ Spawnํ•  ๋•Œ ๋ณ€์ˆ˜ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ.
      • ์ƒ์„ฑํ•  ๋•Œ ๋ณ€์ˆ˜ ์ดˆ๊ธฐ๊ฐ’์„ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ.

๐Ÿ‘‰ ChatEntry Widget์ด ์ƒ์„ฑ๋˜๋ฉด Message ๊ฐ’์„ ๋ฐ›์•„์„œ TextBlock์˜ SetText ํ•ด๋ผ๋Š” ์˜๋ฏธ.


3๏ธโƒฃ WBP_ChatUI

๐Ÿ“Œ ๊ตฌ์„ฑ์š”์†Œ

  • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ์ „์ฒด UI๋ฅผ ๋‹ด๋‹น

  • Overlay

    • UI ์š”์†Œ๋“ค์„ ๊ฒน์ณ์„œ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ
    • ๋‚ด๋ถ€์ ์œผ๋กœ Z-Order์— ๋”ฐ๋ผ ์œ„์ ฏ๋“ค์„ ๊ฒน์ณ์„œ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Œ. ์ฑ„ํŒ…์ฐฝ์ด๋‚˜ ์•Œ๋ฆผ์ฐฝ ๋“ฑ์— ์ž์ฃผ ์‚ฌ์šฉ
  • WBP_ChatBox

    • ์•ž์„œ ์„ค์ • ํ–ˆ๋˜ ์‹ค์ œ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” Widget
    • Overlay ์œ„์— ๋ฐฐ์น˜๋˜์–ด ์ฑ„ํŒ…์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์„ ์ฒ˜๋ฆฌ


๐ŸŽฎ AC_Chat_PC

1๏ธโƒฃ Event Begin Play

  • GetOwner() ์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ AActor* ์ด๋ฏ€๋กœ PlayerController๋กœ Castingํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

  • Is Local Player Controller๋ฅผ ํ†ตํ•ด์„œ Clients์—๊ฒŒ๋งŒ Branch์˜ True๋กœ์ง์ด Excute ๋˜๋„๋ก ํ•จ.

  • Client๊ฐ€ True๋ผ๋ฉด WBP_ChatUI ์ƒ์„ฑ ํ›„ ๋ณ€์ˆ˜๋กœ Promote

  • Viewport์— ํ‘œ์‹œํ•˜๊ณ  ChatUI์˜ ๊ตฌ์„ฑ์š”์†Œ์ธ WBP_ChatBox Instance๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ณ€์ˆ˜๋กœ Promote

2๏ธโƒฃ Input Binding

  • ์•ž์„œ WBP_ChatBox์˜ Function๋“ค์„ ์ž…๋ ฅ(Input)๊ณผ ๋ฐ”์ธ๋”ฉ

    • Enter๋ฅผ ์ž…๋ ฅํ•˜๋ฉด Focus Chat(Function) Excute
    • Mouse Wheel Up/Down์— ๋”ฐ๋ผ Scroll (Up(True/False)) Excute

3๏ธโƒฃ Run On Server & Client

๐Ÿ“Œ Run On Server

  • SendChatMessageOnServer

    • ์ด ํ•จ์ˆ˜๋Š” ํด๋ผ์ด์–ธํŠธ(PlayerController์˜ AC_Chat_PC์˜ On Text Committed์— ์˜ํ•ด)์—์„œ ์„œ๋ฒ„๋กœ ํ˜ธ์ถœํ•˜๋Š” RPCํ•จ์ˆ˜์ด๋‹ค.
    • Message๋ผ๋Š” String์„ ๋ฐ›์•„ ๋กœ์ง์„ ์‹คํ–‰
  • Get Game State

    • ํ˜„์žฌ ๊ฒŒ์ž„์˜ GameState๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    • GameState๋Š” ๋ชจ๋“  PlayerState๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š” ์„œ๋ฒ„-ํด๋ผ ๊ณต์šฉ ๊ฐ์ฒด
  • For Each Loop

    • ๋ชจ๋“  PlayerState์— ๋Œ€ํ•ด ๋ฐ˜๋ณต ์‹คํ–‰
    • ๊ฐ๊ฐ์˜ PlayerState๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด๋‹น PlayerController๋ฅผ ์ฐพ์•„์„œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋ƒ„
  • Add Chat Message on Owning Client

    • PlayerController๋ฅผ ํ†ตํ•ด ์ฐพ์€ Component์—์„œ ์‹คํ–‰๋˜๋Š” Client ์ „์šฉ Event

๐Ÿ” ์ „์ฒด ๋™์ž‘ ํ๋ฆ„ ์ •๋ฆฌ

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ SendChatMessageOnServer(Message) ํ˜ธ์ถœ

  • ์„œ๋ฒ„์—์„œ ๋ชจ๋“  PlayerState ์ˆœํšŒ

  • ๊ฐ ํ”Œ๋ ˆ์ด์–ด์˜ PlayerController๋ฅผ ๊ฐ€์ ธ์˜ด

  • ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ์— ๋ถ™์€ AC_Chat_PC ์ปดํฌ๋„ŒํŠธ ํš๋“

  • ๊ทธ ์ปดํฌ๋„ŒํŠธ์— AddChatMessageOnOwningClient(Message) ํ˜ธ์ถœ

โ†’ ๊ฐ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๊ฐ€ ๋œธ

๐Ÿ“Œ Run On Client

  • AddChatMessageonOwningClient

    • ์ด ํ•จ์ˆ˜๋Š” ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ํ˜ธ์ถœํ•˜๋Š” RPCํ•จ์ˆ˜์ด๋‹ค.
    • Message๋ผ๋Š” String์„ ๋ฐ›์•„ ๋กœ์ง์„ ์‹คํ–‰
  • Add Chat Message

    • ์•ž์„œ Begin Play์—์„œ Promoteํ•˜์—ฌ ๋งŒ๋“  Variable์ธ Chat Box Ref๋ฅผ ํ†ตํ•ด Add Chat Message ํ˜ธ์ถœ

๐Ÿ” ์ „์ฒด ๋™์ž‘ ํ๋ฆ„ ์ •๋ฆฌ

  • ์„œ๋ฒ„์—์„œ ์ „๋‹ฌ๋ฐ›์€ Message๋ฅผ

  • Chat Box Ref๋กœ ์ฐธ์กฐ๋œ UI์— ๋„˜๊ฒจ์ฃผ๊ณ 

  • Add Chat Message ํ•จ์ˆ˜ ํ˜ธ์ถœ โ†’ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๊ฐ€ ํ™”๋ฉด์— ์ถœ๋ ฅ๋จ



๐ŸŽฎ ํšŒ๊ณ 

์šฐ๋ฆฌ๊ฐ€ ๊ฒŒ์ž„์„ ํ•˜๋ฉด ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์Šคํฌ๋กค์ฑ„ํŒ…์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ์‰ฝ์ง€ ์•Š์•˜๋‹ค. AActor์˜ ํ•˜์œ„ AInfo์˜ GameFrameWork์˜ ๊ฐœ๋…์ด ์ด์ œ๋Š” ์ต์ˆ™ํ•˜์ง€๋งŒ ๊ฐ€๋”์€ ํ—ท๊ฐˆ๋ ค์„œ ๋‹ค์‹œ ์ฐพ์•„๋ณด๊ณค ํ–ˆ๋Š”๋ฐ ํ™•์‹คํžˆ ๊ฐœ๋…์„ ์งš๊ณ  ๋„˜์–ด๊ฐ€์•ผ ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด์ „์— ๋งŒ๋“ค์—ˆ๋˜ GunfireParagon Project์—์„œ UI๋ฅผ ๋‹ด๋‹นํ•˜์ง€ ์•Š์•„์„œ ์ต์ˆ™์น˜ ์•Š์€ ๊ฐœ๋…๋“ค์ด ๋งŽ์•˜๋Š”๋ฐ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ •๋ฆฌ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์•„์„œ ์ข‹์•˜๋‹ค.

profile
Unreal 1๊ธฐ

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