Network Project Config - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki

๊ฐœ์š”

Photon Fusion ํ”„๋กœ์ ํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋‹ค์–‘ํ•œ ์ •๋ณด์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” asset

  • Version
  • Peer Mode
  • Default Player Count
  • Network Condition Testing
  • Encryption
  • Prefab Inspection

Fusion Version

  • ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ Fucion Version ๋‚˜์—ด

Scene Setting

  • Peer Mode
    • Single ์„œ๋ฒ„, ํ˜ธ์ŠคํŠธ, ํด๋ผ์ด์–ธํŠธ Peer๋ฅผ ๋‹จ์ผ ๋นŒ๋“œ ๋˜๋Š” ์—๋””ํ„ฐ์—์„œ ์‹คํ–‰ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€
    • Multiple ์—๋””ํ„ฐ์—์„œ ๋‹ค์ค‘ Peer ํ—ˆ์šฉ
      • ํ”ผ์–ด ๋ชจ๋“œ๋ฅผ Multiple๋กœ ์„ค์ •ํ•˜๋ฉด ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ค ํ•„์š” ์—†์ด ๊ฒŒ์ž„ ์„ธ์…˜ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ํ”ผ์–ด๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ์œ ์šฉ

์ง€์—ฐ ๋ณด์ƒ(Lag Compensation)

  • 1์ธ์นญ ์ŠˆํŒ… ๊ฒŒ์ž„๊ณผ ๊ฐ™์€ ๋น ๋ฅธ ์†๋„์˜ ๊ฒŒ์ž„์— ์œ ์šฉ
  • ๊ฒŒ์ž„์˜ HitBox ์Šค๋ƒ…์ƒท ์„ธํŠธ๋ฅผ ์ €์žฅํ•˜์—ฌ ์ˆ˜ํ–‰
    • ์„œ๋ฒ„ ๋ชจ๋“œ or ํ˜ธ์ŠคํŠธ ๋ชจ๋“œ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • Hitbox Buffer Length In MS ํžˆํŠธ๋ฐ•์Šค ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ ์ €์žฅ๋  ๋ฒ„ํผ์˜ ๊ธธ์ด๋ฅผ ์ง€์ •. ์‹œ๊ฐ„์ด ๊ธธ์ˆ˜๋ก ํžˆํŠธ๋ฐ•์Šค ์Šค๋ƒ…์ƒท์ด ์ƒˆ ์Šค๋ƒ…์ƒท์œผ๋กœ ๋ฎ์–ด์“ฐ์—ฌ์ง€๊ธฐ ์ „์— ๋” ์˜ค๋ž˜ ์ €์žฅ
    • Hitbox Defaulr Capacity ์Šค๋ƒ…์ƒท๋‹น ์ €์žฅ๋˜๋Š” ํžˆํŠธ๋ฐ•์Šค ๊ฐ’์˜ ๊ธฐ๋ณธ ์ˆ˜(์ตœ์†Œ๊ฐ’์€ 16)
    • Cached Static Colliders Size ๊ธฐ๋ณธ ์ง€์—ฐ ๋ณด์ƒ ์ฟผ๋ฆฌ์˜ ์บ์‹œ๋œ ์ •์  ์ฝœ๋ผ์ด๋”(PhysX ๋˜๋Š” Box2D) ๋ฐฐ์—ด์˜ ํฌ๊ธฐ

Miscellaneous

  • ๋ถˆ์™„์ „ํ•œ ๋™๊ธฐ ์Šคํฐ ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€(Enqueue Incomplete Synchronous Spawns)
    ํ™œ์„ฑํ™”ํ•˜๋ฉด, ๋™๊ธฐ ๋ถˆ์™„์ „ ์Šคํฐ(Addressables ๋“ฑ)์ด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋Œ€์‹  ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  Fusion.NetworkSpawnStatus.Queued๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ฐ์ฒด ์Šคํฐ ์‹œ๋„๊ฐ€ ๋‹ค์Œ ํ”„๋ ˆ์ž„์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค
  • ๋ฐฐ์น˜ ๋ชจ๋“œ์—์„œ ๋ Œ๋” ํ˜ธ์ถœ(Invoke Render In Batch Mode)
    ํ™œ์„ฑํ™”ํ•˜๋ฉด Fusion.SimulationBehaviour.Render ์ฝœ๋ฐฑ์ด ๋ฐฐ์น˜ ๋ชจ๋“œ์—์„œ ๊ฒŒ์ž„์„ ํ”Œ๋ ˆ์ดํ•  ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๋ฐฐ์น˜ ๋ชจ๋“œ๋Š” Unity ๋นŒ๋“œ ์‹คํ–‰ ํŒŒ์ผ์— ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋Š” -batchmode ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ฐฐ์น˜ ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ํ—ค๋“œ๋ฆฌ์Šค ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ์ž„์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • ๋„คํŠธ์›Œํฌ ID๊ฐ€ ๊ฐ์ฒด ์ด๋ฆ„(Network Id Is Object Name)
    ์ฒดํฌํ•˜๋ฉด ์ƒˆ๋กœ ์Šคํฐ๋œ ๊ฐ์ฒด์˜ ์ด๋ฆ„์— ๋„คํŠธ์›Œํฌ ID๊ฐ€ ํฌํ•จ๋˜๋„๋ก ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •: {[Network Id] ์›๋ž˜ ๊ฐ์ฒด ์ด๋ฆ„}
  • ๋„คํŠธ์›Œํฌ ๊ฐ์ฒด ๋น„ํ™œ์„ฑ ๊ฐ€๋“œ ์ˆจ๊ธฐ๊ธฐ(Hide Network Object Inactivity Guard)
    NetworkObjects ๋‚ด์— ์ค‘์ฒฉ๋œ NetworkObjectInactivityGuard๋ผ๋Š” ์ด๋ฆ„์˜ GameObject๊ฐ€ ํ™œ์„ฑํ™”๋˜๊ธฐ ์ „์— ํŒŒ๊ดด๋œ NetworkObjects์˜ OnDestroy ๋ฉ”์‹œ์ง€๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์ฒดํฌํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๊ฐ€๋“œ๊ฐ€ ๊ณ„์ธต ๊ตฌ์กฐ์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

Simulation

  • Replication Features
    • None ๊ธฐ๋ณธ ์„ค์ •์ด๋ฉฐ ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ์ค‘์— ํ‹ฑ๋‹น ๋ฐ์ดํ„ฐ ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ด์ƒ์ 
    • Scheduling ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋„คํŠธ์›Œํฌ ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•˜์ง€ ์•Š์•˜์„ ๋•Œ(๋ฐ์ดํ„ฐ ํ‹ฑ ํ•œ๋„์— ๋„๋‹ฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ) ์„œ๋ฒ„๋Š” ํ•ด๋‹น ๋„คํŠธ์›Œํฌ ๊ฐ์ฒด์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‹ค์Œ Tick ์—…๋ฐ์ดํŠธ๋กœ ์ฆ๊ฐ€์‹œํ‚ด
    • Scheduling and Interest Management ์Šค์ผ€์ค„๋ง ์™ธ์—๋„ ๊ด€์‹ฌ ๊ด€๋ฆฌ(Area of Interest ๋ฐ Explicit Interest) ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”
  • Input Transfer Mode ์ž…๋ ฅ์ด ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ฐฉ์‹ ๊ฒฐ์ •
    • Redundancy ๋ธํƒ€ ์••์ถ• ๋ฐ ์ค‘๋ณต ์ž…๋ ฅ์„ ์ „์†กํ•˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒŒ์ž„์— ์‚ฌ์šฉ
    • Latest State ์ตœ์‹  ์ž…๋ ฅ ์ƒํƒœ๋งŒ ์ „์†กํ•˜๋ฉฐ, ์ด๋Š” ๋จธ๋ฆฌ์™€ ์†์˜ ์œ„์น˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ํฌํ•จํ•˜๋Š” VR๊ณผ ๊ฐ™์€ ๋Œ€ํ˜• ์ž…๋ ฅ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ์ž„์— ์œ ์šฉ
  • Player Count 1์—์„œ 255๊นŒ์ง€ ๋ฒ”์œ„ ๋‚ด์—์„œ ์ƒˆ Fusion ์„ธ์…˜์„ ์‹œ์ž‘ํ•  ๋•Œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ”Œ๋ ˆ์ด์–ด ์ˆ˜

"๋‹ค์Œ ์„ค์ •์€ ๊ณต์œ  ๋ชจ๋“œ(Shared Mode)์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๊ณต์œ  ๋ชจ๋“œ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ Tick ๋ ˆ์ดํŠธ๊ฐ€ ํ•ญ์ƒ 32์ด๊ณ  ํด๋ผ์ด์–ธํŠธ ์ „์†ก ๋ ˆ์ดํŠธ๊ฐ€ ํ•ญ์ƒ 16์ž…๋‹ˆ๋‹ค"

  • Client Tick Rate ๋“œ๋กญ๋‹ค์šด์„ ํ†ตํ•ด 8์—์„œ 256๊นŒ์ง€์˜ ๊ฐ’์„ ์„ ํƒ ๊ฐ€๋Šฅ
  • Client Send Rate ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์†๋„
    • 1/8 ํด๋ผ์ด์–ธํŠธ Tick ๋ ˆ์ดํŠธ๊ฐ€ 240 ์ด์ƒ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ
    • 1/4 ํด๋ผ์ด์–ธํŠธ Tick ๋ ˆ์ดํŠธ๊ฐ€ 4๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ
    • 1/2
    • 1:1 ํด๋ผ์ด์–ธํŠธ Tick ๋ ˆ์ดํŠธ์™€ ๋™์ผํ•œ ๊ฐ’
  • Server Tick Rate ์„œ๋ฒ„๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋Š” ์†๋„๋กœ, ํด๋ผ์ด์–ธํŠธ ์ „์†ก ๋ ˆ์ดํŠธ์™€ ๋™์ผํ•œ ์„ ํƒ์ง€
  • Server Send Rate ์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์†๋„๋กœ, ํด๋ผ์ด์–ธํŠธ ์ „์†ก ๋ ˆ์ดํŠธ์™€ ๋™์ผํ•œ ์„ ํƒ์ง€๋ฅผ ๊ฐ€์ง€์ง€๋งŒ ์„œ๋ฒ„ ํ‹ฑ ๋ ˆ์ดํŠธ๋ณด๋‹ค ๋†’์„ ์ˆ˜ ์—†์Œ

๋„คํŠธ์›Œํฌ (Network)

  • ์—ฐ๊ฒฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ (Connection Timeout)
    ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์™€์˜ ์—ฐ๊ฒฐ์„ ๋Š๊ณ , ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ์„ ๋Š์Šต๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐ ์ข…๋ฃŒ ์‹œ๊ฐ„ (Connecting Shutdown Time)
    ์—ฐ๊ฒฐ ์ƒํƒœ๊ฐ€ ์ข…๋ฃŒ๋กœ ๋ณ€๊ฒฝ๋œ ํ›„ ์—ฐ๊ฒฐ ๋ฐ ๊ด€๋ จ ์ฐธ์กฐ๊ฐ€ ํ•ด์ œ๋˜๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค.
  • ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ๋ชจ๋“œ (Reliable Data Transfer Modes)
    ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ๋ชจ๋“œ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • Client to Server
      ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Client to Client With Server Proxy
      ์„œ๋ฒ„๋ฅผ ํ”„๋ก์‹œ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (Host Migration)

  • ์ž๋™ ์—…๋ฐ์ดํŠธ ํ™œ์„ฑํ™” (Enable Auto Update)
    ์ฒดํฌํ•˜๋ฉด ํ˜ธ์ŠคํŠธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.
  • ์—…๋ฐ์ดํŠธ ์ง€์—ฐ (Update Delay)
    ํ˜ธ์ŠคํŠธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šค๋ƒ…์ƒท์ด Photon Cloud์— ์—…๋กœ๋“œ๋˜๋Š” ๊ฐ„๊ฒฉ ์‹œ๊ฐ„(์ดˆ)์ž…๋‹ˆ๋‹ค.

์•”ํ˜ธํ™” (Encryption)

์ด ํ† ๊ธ€์€ ์ด Fusion ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์•”ํ˜ธํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”ํ• ์ง€๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ์กฐ๊ฑด (Network Conditions)

๋„คํŠธ์›Œํฌ ์กฐ๊ฑด์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋“ค์€ ์ง€์—ฐ ๋ฐ ์†์‹ค๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ์กฐ๊ฑด์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ™œ์„ฑํ™”๋จ(Enabled) ์ฒดํฌํ•˜๋ฉด ๋” ๋งŽ์€ ์˜ต์…˜์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
  • ์ง€์—ฐ ํ˜•ํƒœ(Delay Shape) ์ง€์—ฐ ๋ณ€๋™์˜ ํŒจํ„ด์„ ์„ค์ •
    • Noise
    • Sine
    • Square
    • Triangle
    • Saw
    • Reverse Saw
  • ์ง€์—ฐ ์ตœ์†Œ๊ฐ’(Delay Min) ์ตœ์†Œ ์ง€์—ฐ ์‹œ๊ฐ„(์ดˆ), 0์—์„œ 0.5๊นŒ์ง€์˜ ๋ฒ”์œ„.
  • ์ง€์—ฐ ์ตœ๋Œ€๊ฐ’(Delay Max) ์ตœ๋Œ€ ์ง€์—ฐ ์‹œ๊ฐ„(์ดˆ), 0์—์„œ 0.5๊นŒ์ง€์˜ ๋ฒ”์œ„.
  • ์ง€์—ฐ ์ฃผ๊ธฐ(Delay Period) ์ง€์—ฐ์ด Delay Min๊ณผ Delay Max ์‚ฌ์ด์—์„œ ๋ณ€๋™ํ•˜๋Š” ์ฃผ๊ธฐ(์ดˆ).
  • ์ง€์—ฐ ์ž„๊ณ„๊ฐ’(Delay Threshold) ๋ณ€๋™์ด ์ด ๊ฐ’ ์•„๋ž˜๋กœ ๋–จ์–ด์ง€๋ฉด(0์—์„œ 1 ์‚ฌ์ด) ์ง€์—ฐ์ด Delay Min์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€ ์ง€ํ„ฐ(Additional Jitter) ๋ณ€๋™๊ธฐ๊ฐ€ ๋‹ค์Œ ์ง€์—ฐ ๊ฐ’์„ ๊ฒฐ์ •ํ•œ ํ›„, 0์—์„œ ์ด ๊ฐ’ ์‚ฌ์ด์˜ ์ž„์˜์˜ ๊ฐ’(์ดˆ ๋‹จ์œ„)์ด ์ง€์—ฐ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  • ์†์‹ค ํ™•๋ฅ  ํ˜•ํƒœ(Loss Chance Shape) ์†์‹ค ๋ณ€๋™์˜ ํŒจํ„ด์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์ง€๋Š” ์ง€์—ฐ ํ˜•ํƒœ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  • ์†์‹ค ํ™•๋ฅ  ์ตœ์†Œ๊ฐ’(Loss Chance Min) ์†์‹ค์ด ๋ฐœ์ƒํ•  ์ตœ์†Œ ํ™•๋ฅ  ๊ฐ’, 0(0%)์—์„œ 1(100%)๊นŒ์ง€์˜ ๋ฒ”์œ„.
  • ์†์‹ค ํ™•๋ฅ  ์ตœ๋Œ€๊ฐ’(Loss Chance Max) ์†์‹ค์ด ๋ฐœ์ƒํ•  ์ตœ๋Œ€ ํ™•๋ฅ  ๊ฐ’, 0(0%)์—์„œ 1(100%)๊นŒ์ง€์˜ ๋ฒ”์œ„.
  • ์†์‹ค ํ™•๋ฅ  ์ž„๊ณ„๊ฐ’(Loss Chance Threshold) ๋ณ€๋™์ด ์ด ๊ฐ’ ์•„๋ž˜๋กœ ๋–จ์–ด์ง€๋ฉด(0์—์„œ 1 ์‚ฌ์ด) ์ง€์—ฐ์ด Loss Chance Min์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • ์†์‹ค ํ™•๋ฅ  ์ฃผ๊ธฐ(Loss Chance Period) ์†์‹ค ํ™•๋ฅ ์ด Loss Chance Min๊ณผ Loss Chance Max ์‚ฌ์ด์—์„œ ๋ณ€๋™ํ•˜๋Š” ์ฃผ๊ธฐ(์ดˆ).
  • ์ถ”๊ฐ€ ์†์‹ค(Additional Loss) ๋ณ€๋™๊ธฐ๊ฐ€ ๋‹ค์Œ ์†์‹ค ํ™•๋ฅ  ๊ฐ’์„ ๊ฒฐ์ •ํ•œ ํ›„, ์ถ”๊ฐ€๋กœ 0์—์„œ ์ด ๊ฐ’ ์‚ฌ์ด์˜ ์ž„์˜์˜ ๊ฐ’(์ •๊ทœํ™”๋œ ์†์‹ค ํ™•๋ฅ  ๋น„์œจ)์ด ์†์‹ค ํ™•๋ฅ ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์†์‹ค(Loss)์€ ์ง€์—ฐ ์‹œ๊ฐ„(์ดˆ) ๋Œ€์‹ , 0%์—์„œ 100% ์‚ฌ์ด์˜ ์†์‹ค ํ™•๋ฅ ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ’์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฑฐ์˜ ๋™์ผํ•œ ์„ค์ •์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

ํž™ (Heap)

์‚ฌ์šฉ์ž๋“ค์ด Fusion์—์„œ ์‚ฌ์šฉํ•  ์‚ฌ์ „ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ตœ์ ํ™” ๋ฐ ํšจ์œจ์„ฑ ํ–ฅ์ƒ์„ ๋•์Šต๋‹ˆ๋‹ค.

  • ํŽ˜์ด์ง€ ์‰ฌํ”„ํŠธ(Page Shift) ๊ฐ ํž™ ํŽ˜์ด์ง€์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์˜ ์„ธ๋ฐ€๋„์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. 1 KB์—์„œ 256 KB๊นŒ์ง€ 2์˜ ์ œ๊ณฑ์ˆ˜๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋” ๋‚ฎ์€ ์‰ฌํ”„ํŠธ๋Š” ๋” ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„, ๋” ๋†’์€ ์‰ฌํ”„ํŠธ๋Š” ๋” ํฐ ํ• ๋‹น์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€ ์ˆ˜(Page Count) ํž™์„ ์œ„ํ•ด ํ• ๋‹น๋œ ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. 16์—์„œ 4096๊นŒ์ง€์˜ ๋ฒ”์œ„๋กœ, ํž™์— ํ• ๋‹น๋œ ํŽ˜์ด์ง€ ์ˆ˜์™€ ์ดˆ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๋Ÿ‰์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

์œ„๋ฒ„ ์„ค์ • (Weaver Settings)

๋‹ค์Œ์€ Assembly-CSharp.dll์— ์ €์ˆ˜์ค€ ๋„คํŠธ์›Œํฌ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ฝ์ž…ํ•˜๋Š” Fusion IL Weaver์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค.

  • ์œ„๋น™ํ•  ์–ด์…ˆ๋ธ”๋ฆฌ(Assemblies to Weave) ์œ„๋น™๋  ์–ด์…ˆ๋ธ”๋ฆฌ์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค
    • Fusion.Unity
    • Assembly-CSharp
    • Assembly-CSharp-firstpass
    • Fusion.Addons.Physics (ํ”„๋กœ์ ํŠธ๊ฐ€ Fusion์˜ ๋ฌผ๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ)
  • ์ง๋ ฌํ™”๋œ ์‚ฌ์ „ ์‚ฌ์šฉ(Use Serialized Dictionary) ์ฒดํฌํ•˜๋ฉด Fusion.SerializeableDictionary๊ฐ€ ๋„คํŠธ์›Œํฌ ์†์„ฑ์˜ ์ดˆ๊ธฐ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฒดํฌํ•˜์ง€ ์•Š์œผ๋ฉด weaver๋Š” System.Generic.Dictionary๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์€ Unity์—์„œ ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์—†์ง€๋งŒ, Odin๊ณผ ๊ฐ™์€ ์ปค์Šคํ…€ ์ง๋ ฌํ™”๊ธฐ๋Š” ์ด๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์†์„ฑ์— ๋Œ€ํ•œ null ๊ฒ€์‚ฌ(Null Checks for Networked Properties): ์„ค์ •ํ•˜๋ฉด weaver๋Š” Networked ์†์„ฑ์ด ์žˆ๋Š” ๋ชจ๋“  Fusion.NetworkBehaviour์— ์—ฐ๊ฒฐ๋œ Fusion.NetworkObject๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • RPC ์†์„ฑ ์‚ฌ์šฉ ๊ฒ€์‚ฌ(Check Rpc Attribute Usage) ์„ค์ •ํ•˜๋ฉด weaver๋Š” Fusion.RpcAttribute๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์œ ํ˜•์—์„œ ์‚ฌ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Fusion.RpcAttribute๊ฐ€ Unity.MonoBehaviour ๋ฉ”์„œ๋“œ์— ์ถ”๊ฐ€๋˜๊ณ  ์ด ์˜ต์…˜์ด ์ฒดํฌ๋œ ๊ฒฝ์šฐ, RPC๋Š” Fusion.NetworkBehaviour ๋ฐ Fusion.SimulatedBehaviours์—๋งŒ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ์œ ํ˜•์„ ์Šค์บ”ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์œ„๋น™ ๋ฐ ์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋น„์–ด ์žˆ๋Š” ๋„คํŠธ์›Œํฌ ์†์„ฑ ๊ฒ€์‚ฌ(Check Networked Properties Being Empty) ์ฒดํฌํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ Fusion.NetworkedAttribute๋ฅผ ์ž˜๋ชป ์ •์˜ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ์˜ getter์™€ setter๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋น„์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
[Networked]
public int NetworkedProperty {get; set;}

ํ”„๋ฆฌํŒน (Prefabs)

์ด ๋‘ ๊ฐ€์ง€ ์„ค์ •์€ ํ”„๋ฆฌํŒน์ด ์–ด๋–ป๊ฒŒ ์–ธ๋กœ๋“œ๋˜๋Š”์ง€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค

  • ๋งˆ์ง€๋ง‰ ์ธ์Šคํ„ด์Šค ํ•ด์ œ ์‹œ ํ”„๋ฆฌํŒน ์–ธ๋กœ๋“œ(Unload Prefab On Releasing Last Instance) true๋กœ ์„ค์ •ํ•˜๋ฉด, ๋งˆ์ง€๋ง‰ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•ด์ œ๋  ๋•Œ ํ”„๋ฆฌํŒน์ด ์–ธ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
  • ์ข…๋ฃŒ ์‹œ ํ”„๋ฆฌํŒน ์–ธ๋กœ๋“œ(Unload Prefabs On Shutdown) true๋กœ ์„ค์ •ํ•˜๋ฉด, ์ข…๋ฃŒ ์‹œ ๋ชจ๋“  ํ”„๋ฆฌํŒน์ด ์–ธ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋ฆฌํŒน์„ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋ฉด ์–ธ๋กœ๋“œํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‹ค์‹œ ํ•„์š”ํ•  ๊ฒฝ์šฐ ์žฌ๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ ์ƒ์„ฑ (Auto-Generated)

์ด ์„น์…˜์€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ ํ”„๋ฆฌํŒน ๊ฒ€์‚ฌ๊ธฐ ํ‘œ์‹œ(Show Network Prefab Inspector) ์ด ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ฐฝ์ด ์—ด๋ฆฌ๋ฉฐ, Fusion.NetworkObject ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•˜๊ณ  Fusion.NetworkObject.IsSpawnable์ด ํ™œ์„ฑํ™”๋œ ํ”„๋กœ์ ํŠธ์˜ ๋‹ค์–‘ํ•œ ํ”„๋ฆฌํŒน์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋ฆฌํŒน(Prefabs) ์•ž์„œ ์–ธ๊ธ‰ํ•œ ๋ฒ„ํŠผ ์•„๋ž˜์—๋Š” ํ”„๋กœ์ ํŠธ์˜ NetworkObject ํ”„๋ฆฌํŒน ๋ชฉ๋ก์ด ๋“œ๋กญ๋‹ค์šด ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ชฉ๋ก์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์ถ”๊ฐ€ ํ”„๋ฆฌํŒน์€ ๋Ÿฐํƒ€์ž„์—์„œ Fusion.NetworkPrefabTable.TryAddSource๋ฅผ ํ†ตํ•ด ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ–‰๋™ ๋ฉ”ํƒ€(Behaviour Meta) ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  Fusion.SimulationBehaviours์— ๋Œ€ํ•œ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๋ชฉ๋กํ™”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹คํ–‰ ์ˆœ์„œ์™€ ๊ฐ™์€ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ํ”„๋ฆฌํŒน ๊ฒ€์‚ฌ๊ธฐ(Network Prefabs Inspector)

์•ž์„œ ์–ธ๊ธ‰ํ•œ ๋ฐ”์™€ ๊ฐ™์ด, ๋„คํŠธ์›Œํฌ ํ”„๋ฆฌํŒน ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Fusion.NetworkObject ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•˜๊ณ  Fusion.NetworkObject.IsSpawnable์ด ํ™œ์„ฑํ™”๋œ ํ”„๋ฆฌํŒน์„ ์ž์„ธํžˆ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ ํ”„๋ฆฌํŒน ๊ฒ€์‚ฌ๊ธฐ ์˜ˆ์‹œ ๋„คํŠธ์›Œํฌ ํ”„๋ฆฌํŒน ๊ฒ€์‚ฌ๊ธฐ์˜ ์˜ˆ์‹œ ๋ทฐ์ž…๋‹ˆ๋‹ค

์ด ์ฐฝ์˜ ์ฃผ์š” ํˆด๋ฐ”์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค

  • ์ƒˆ๋กœ ๊ณ ์นจ(Refresh) ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๊ณ  ์ƒˆ๋กœ์šด ํ”„๋ฆฌํŒน์ด ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค
  • ์„ ํƒ ๋™๊ธฐํ™”(Sync Selection) ์ผœ์ง€๋ฉด, Unity๋Š” ์ฐฝ์—์„œ ๊ฐ•์กฐ๋œ ํ”„๋ฆฌํŒน ์ž์‚ฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค
  • ๋กœ๋“œ๋œ ํ•ญ๋ชฉ๋งŒ(Loaded Only) ์ผœ์ง€๋ฉด, ํ˜„์žฌ ๋กœ๋“œ๋œ ํ”„๋ฆฌํŒน๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค

๊ฐ ํ–‰์€ ๋‹ค๋ฅธ ํ”„๋ฆฌํŒน์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด ์ฐฝ์˜ ๊ฐ ์—ด์€ ๋‹ค์Œ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค

  • ์ƒํƒœ(State) ํ”„๋ฆฌํŒน์ด ํ˜„์žฌ ๋กœ๋“œ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค
  • ์œ ํ˜•(Type) ์ด ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ”„๋ฆฌํŒน์ธ์ง€, ์ฆ‰ ์–ด๋–ป๊ฒŒ ๋กœ๋“œ๋  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค
  • R Resources ํด๋”์— ๋ฐฐ์น˜๋œ ํ”„๋ฆฌํŒน
  • SL Resources ํด๋” ์™ธ๋ถ€์— ๋ฐฐ์น˜๋œ ์ •์  ํ”„๋ฆฌํŒน
  • A ์ฃผ์†Œ ์ง€์ • ๊ฐ€๋Šฅํ•œ ํ”„๋ฆฌํŒน (ํ™”๋ฉด์—๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ)
  • PrefabId Fusion์—์„œ ํ”„๋ฆฌํŒน์— ํ• ๋‹นํ•œ ID
  • ๊ฒฝ๋กœ(Path) ํ”„๋ฆฌํŒน์˜ ํŒŒ์ผ ๊ฒฝ๋กœ