# ๐ŸŽฏ ์ตœ์ข… ์ง„๋‹จ ๋ฐ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ ## ๐Ÿ“Š ํ˜„์žฌ ์ƒํ™ฉ ๋ถ„์„ ### ์„ฑ๊ณตํ•œ ์‚ฌํ•ญ - โœ… yougetsignal: ํฌํŠธ 4045 ์ ‘๊ทผ ๊ฐ€๋Šฅ (์™ธ๋ถ€์—์„œ ์—ด๋ฆผ) - โœ… ๋ฐฉํ™”๋ฒฝ: ํ—ˆ์šฉ (yougetsignal ์„ฑ๊ณต์œผ๋กœ ์ฆ๋ช…) - โœ… OS ๋ฐ”์ธ๋”ฉ: ๊ฐ€๋Šฅ (PortListenerTest ์ฆ๋ช…) - โœ… NetworkManager: IsServer=True, IsHost=True - โœ… Player Prefab: Player (ํ• ๋‹น๋จ) - โœ… Unity Transport: 4045, 0.0.0.0 - โœ… ๋ชจ๋“  ์„ค์ •: ์˜ฌ๋ฐ”๋ฆ„ ### ๋ฌธ์ œ: ์œ ๋‹ˆํ‹ฐ Netcode๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ์ข…๋ฃŒ ``` ์ƒํ™ฉ: - ๊ฒŒ์ž„ ์‹œ์ž‘ โ†’ ํ˜ธ์ŠคํŠธ ์‹œ์ž‘๋จ - ์ž ์‹œํ›„ (1-30์ดˆ) โ†’ ์„œ๋ฒ„ ์ข…๋ฃŒ๋จ - ํฌํŠธ 4045: ์™ธ๋ถ€์—์„œ ๋‹ซํž˜ - yougetsignal: "closed" ``` --- ## ๐Ÿ” ๋ฌธ์ œ ์›์ธ ### ๊ฐ€์žฅ ํ”ํ•œ ๊ฐ€๋Šฅ์„ฑ 1: AutoHost ๊ฐ„์„ญ ``` AutoHost๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ–‰๋™: - Start()์—์„œ ์ž๋™์œผ๋กœ StartHost() ํ˜ธ์ถœ - NetworkManager๊ฐ€ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ด๋ฉด โ†’ ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ โ†’ ๋ฌด์‹œํ•˜๊ณ  ๋„˜์–ด๊ฐ - ํ•˜์ง€๋งŒ ์—ฐ๊ฒฐ ์Šน์ธ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด โ†’ ์ž๋™์œผ๋กœ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ โ†’ ํฌํŠธ๊ฐ€ ๋‹ซํž˜ ``` **ํ•ด๊ฒฐ์ฑ…:** ``` ์”ฌ์—์„œ AutoHost ์ปดํฌ๋„ŒํŠธ ์ œ๊ฑฐ ๋˜๋Š” Enable Auto Host ์ฒดํฌ ํ•ด์ œ ``` ### ๊ฐ€์žฅ ํ”ํ•œ ๊ฐ€๋Šฅ์„ฑ 2: NetworkConnectionHandler ์Šน์ธ ์˜ค๋ฅ˜ ``` NetworkConnectionHandler.ApprovalCheck()์—์„œ: - ์Šคํฐ ํฌ์ธํŠธ ๋ชจ๋‘ ์ฐพ์•˜์Œ - ํ•˜์ง€๋งŒ ์Šน์ธ: response.Approved = true - response.CreatePlayerObject = false - response.Position/Rotation ์„ค์ • ์ด ์ƒํ™ฉ์—์„œ: - Netcode๋Š” "์ˆ˜๋™ ์Šคํฐ์œผ๋กœ ๋Œ€๊ธฐ" ์ƒํƒœ๋กœ ๋จ - ํ•˜์ง€๋งŒ ์‹ค์ œ ํ”Œ๋ ˆ์ด์–ด ์Šคํฐํ•˜์ง€ ์•Š์Œ (CreatePlayerObject=false) - ์—ฐ๊ฒฐ ์‹œ๊ฐ„์ดˆ๊ณผ ๋˜๋Š” ์„œ๋ฒ„ ์ธก์—์„œ ์ข…๋ฃŒ ``` **ํ•ด๊ฒฐ์ฑ…:** ``` NetworkConnectionHandler.ApprovalCheck() ์ˆ˜์ •: response.Approved = true; response.CreatePlayerObject = false; response.PlayerPrefabHash = 0; response.Position = Vector3.zero; response.Rotation = Quaternion.identity; โ†“ response.Approved = true; response.CreatePlayerObject = true; // ์Šคํฐ ์ƒ์„ฑ! response.PlayerPrefabHash = NetworkManager.Singleton.NetworkConfig.PlayerPrefab.GetComponent().GlobalObjectIdHash; ``` ### ๊ฐ€๋Šฅ์„ฑ 3: ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ์—์„œ Shutdown() ํ˜ธ์ถœ ``` AutoHost, ๋„คํŠธ์›Œํฌ ๊ด€๋ จ ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์—์„œ - ๋ช…์‹œ์ ์ด๋“  ์•„๋‹ˆ๋“  NetworkManager.Shutdown()๋ฅผ ํ˜ธ์ถœ - ์—ฐ๊ฒฐ ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š์•„๋„ ํ˜ธ์ถœ๋จ ``` **ํ•ด๊ฒฐ์ฑ…:** ``` - ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ์—์„œ Shutdown() ํ˜ธ์ถœ ์ œ๊ฑฐ - ๋˜๋Š” ๋ช…์‹œ์ ์ธ ์กฐ๊ฑด๋ฌธ ์ถ”๊ฐ€ ``` ### ๊ฐ€๋Šฅ์„ฑ 4: ๋„คํŠธ์›Œํฌ ์ด๋ฒคํŠธ์—์„œ ์˜ˆ์™ธ ๋ฐœ์ƒ ``` NetworkConnectionHandler์˜ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ - ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด NetworkManager.Shutdown() ํŠธ๋ฆฌ๊ฑฐ ``` **ํ•ด๊ฒฐ์ฑ…:** ``` try-catch๋กœ ๋ž˜ํ•‘ ๋ฐ ๋กœ๊น… ์ถ”๊ฐ€ ``` --- ## โœ… ํ•ด๊ฒฐ ๋‹จ๊ณ„ (์ˆœ์„œ๋Œ€๋กœ ์ˆ˜ํ–‰) ### 1๋‹จ๊ณ„: AutoHost ์ œ๊ฑฐ (๊ฐ€์žฅ ์ค‘์š”!) ``` 1. ์”ฌ์—์„œ AutoHost ๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ ์ฐพ๊ธฐ 2. ์ œ๊ฑฐ (์ปดํฌ๋„ŒํŠธ ์šฐํด๋ฆญ โ†’ Remove Component) 3. ๋˜๋Š” Enable Auto Host ์ฒดํฌ ํ•ด์ œ ``` ### 2๋‹จ๊ณ„: SimpleNetworkMonitor ์ถ”๊ฐ€ ``` 1. SimpleNetworkMonitor๋ฅผ ์”ฌ์— ์ถ”๊ฐ€ 2. ํ”Œ๋ ˆ์ดํ•˜์—ฌ 5-10์ดˆ๊ฐ„ ๊ด€์ฐฐ 3. "Server stopped X times!" ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜์˜ค๋ฉด โ†’ ์ด๊ฒƒ์ด ๋ฌธ์ œ ์›์ธ ํ™•์ธ! ``` ### 3๋‹จ๊ณ„: ๋ฌธ์ œ ์›์ธ ์ฐพ๊ธฐ ``` Monitor์—์„œ ๋‹ค์Œ์„ ํ™•์ธ: ์ •์ƒ์ ์ธ ๊ฒฝ์šฐ: - Server started (Count: 1) - ๊ทธ ํ›„ ์ค‘์ง€ ์ค‘๋‹จ ์—†์Œ - Server uptime: ๊ณ„์† ์ฆ๊ฐ€ ๋ถˆ์•ˆ์ •์ ์ธ ๊ฒฝ์šฐ (ํ˜„์žฌ ๋ฌธ์ œ): - Server started (Count: 1) - Server stopped (Count: 1+) - Server started (Count: 2+) - Server stopped (Count: 2+) - ์งง์€ ์—…ํƒ€์ž„ (1-30์ดˆ) ``` ### 4๋‹จ๊ณ„: AutoHost๊ฐ€ ์›์ธ์ธ์ง€ ํ™•์ธ ``` 1. AutoHost ์ œ๊ฑฐ ํ›„ ํ…Œ์ŠคํŠธ 2. ํ˜ธ์ŠคํŠธ ์‹œ์ž‘ 3. Monitor ๊ด€์ฐฐ 4. ํฌํŠธ ์—ด๋ฆฐ ์ƒํƒœ ํ™•์ธ (yougetsignal) ์ด๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐ๋˜๋ฉด: โ†’ AutoHost๊ฐ€ ๋ฌธ์ œ์˜€์Œ! ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด: โ†’ ๋‹ค๋ฅธ ์›์ธ ์ฐพ์•„์•ผ ํ•จ ``` --- ## ๐ŸŽฏ ํŒ€์›๊ณผ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ• ### ํ˜ธ์ŠคํŠธ (๋‹น์‹ ) ``` 1. AutoHost ์ œ๊ฑฐ 2. SimpleNetworkMonitor ์ถ”๊ฐ€ 3. ํ˜ธ์ŠคํŠธ ์‹œ์ž‘ 4. Monitor์—์„œ "Server uptime" ๊ด€์ฐฐ 5. yougetsignal์—์„œ ํฌํŠธ 4045 ํ™•์ธ 6. ํŒ€์›์—๊ฒŒ ํผ๋ธ”๋ฆญ IP ๊ณต์œ  ``` ### ํŒ€์› ``` 1. ์—๋””ํ„ฐ์—์„œ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋“œ ์‹œ์ž‘ 2. ๋‹น์‹ ์˜ ํผ๋ธ”๋ฆญ IP ์ž…๋ ฅ: 4045 3. "์—ฐ๊ฒฐ" ํด๋ฆญ 4. ์„ฑ๊ณต: ํ”Œ๋ ˆ์ด์–ด ์Šคํฐ, ๊ฒŒ์ž„ ์‹œ์ž‘! ๐ŸŽ‰ ``` --- ## ๐Ÿ“Š ์˜ˆ์ƒ ๊ฒฐ๊ณผ ### ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ ``` Monitor ๋กœ๊ทธ: [SimpleMonitor] Server started (Count: 1) [SimpleMonitor] Server uptime: 10s, 20s, 30s... [SimpleMonitor] Client connected: [ํŒ€์› ID] ํŒ€์›: - ์ ‘์† ์„ฑ๊ณต! - ํ”Œ๋ ˆ์ด์–ด ์Šคํฐ๋จ - ๊ฒŒ์ž„ ์‹œ์ž‘ ๊ฐ€๋Šฅ! yougetsignal: - Port 4045: open ``` ### ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ (ํ˜„์žฌ) ``` Monitor ๋กœ๊ทธ: [SimpleMonitor] Server started (Count: 1) [SimpleMonitor] Server stopped (Count: 1, Uptime: 5s) [SimpleMonitor] Server started (Count: 2) [SimpleMonitor] Server stopped (Count: 2, Uptime: 8s) ํŒ€์›: - ์ ‘์† ์‹œ๋„ - "Failed to connect" ์—๋Ÿฌ - ํฌํŠธ๊ฐ€ ๋‹ซํž˜ ์žˆ์–ด์„œ ์‹คํŒจ ``` --- ## ๐Ÿ”ง ํ•„์ˆ˜ ์กฐ์น˜ ### 1. AutoHost ์ œ๊ฑฐ (์ฆ‰์‹œ) ``` AutoHost๋Š” ๊ฒŒ์ž„์— ํ•„์š” ์—†์Œ - ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ UI๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š” - NetworkConnectionHelper๋‚˜ - ๋˜๋Š” ์ง์ ‘ NetworkManager.StartHost() ``` ### 2. ์„ค์ • ํ™•์ธ ``` NetworkManager โ†’ Network Config: โœ“ Player Prefab: Player โœ“ Connection Approval: ์ฒดํฌ โœ“ Enable Scene Management: ์ฒดํฌ Unity Transport: โœ“ Port: 4045 โœ“ Address: 0.0.0.0 โœ“ ServerListenAddress: 0.0.0.0 ``` ### 3. ๋ฐฉํ™”๋ฒฝ ํ™•์ธ ``` Windows ๋ฐฉํ™”๋ฒฝ: - ํฌํŠธ 4045 ํ—ˆ์šฉ - Unity Editor ํ—ˆ์šฉ - ๋นŒ๋“œ ์‹คํ–‰ํŒŒ์ผ ํ—ˆ์šฉ ๋ผ์šฐํ„ฐ: - ํฌํŠธ ํฌ์›Œ๋”ฉ ๊ตฌ์„ฑ๋จ ``` --- ## ๐Ÿ“‹ ํ…Œ์ŠคํŠธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ### ํ˜ธ์ŠคํŠธ ์ธก - [ ] AutoHost ์ œ๊ฑฐ๋จ - [ ] SimpleNetworkMonitor ์ถ”๊ฐ€๋จ - [ ] ํ˜ธ์ŠคํŠธ ์‹œ์ž‘ ์„ฑ๊ณต - [ ] ์„œ๋ฒ„ ์ค‘์ง€ ์—†์Œ (์ตœ์†Œ 30์ดˆ) - [ ] Monitor: "Server uptime: 30s+" ํ‘œ์‹œ - [ ] yougetsignal: "Port 4045 is open" ### ํŒ€์› ์ธก - [ ] ํผ๋ธ”๋ฆญ IP ์ž…๋ ฅ: 4045 - [ ] "์—ฐ๊ฒฐ" ํด๋ฆญ - [ ] ์ ‘์† ์„ฑ๊ณต - [ ] ํ”Œ๋ ˆ์ด์–ด ์Šคํฐ๋จ - [ ] ๊ฒŒ์ž„ ์‹œ์ž‘ ๊ฐ€๋Šฅ --- ## ๐Ÿš€ ๋‹ค์Œ ์•ก์…˜ ### ์ง€๊ธˆ ๋‹น์žฅ ํ•  ๊ฒƒ ``` 1. AutoHost ์ œ๊ฑฐ (์”ฌ์—์„œ ์ฐพ๊ธฐ โ†’ Remove Component) 2. ํ”Œ๋ ˆ์ดํ•˜์—ฌ 10์ดˆ๊ฐ„ ๊ด€์ฐฐ 3. Monitor ๋กœ๊ทธ ํ™•์ธ 4. "Server stopped X times!" ๋ณด์ด๋ฉด โ†’ ์ด๊ฒƒ์ด ํ•ด๊ฒฐํ•ด์•ผ ํ•  ํฌ์ธํŠธ! ``` ### Monitor๊ฐ€ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ ``` ์ •์ƒ: โœ“ Server started (Count: 1) โœ“ Uptime: ๊ณ„์† ์ฆ๊ฐ€ โœ“ Client connected: [ID] ๋ถˆ์•ˆ์ • (ํ˜„์žฌ): โœ— Server stopped (Count: 1) โœ— Server stopped (Count: 2+) โœ— ์งง์€ ์—…ํƒ€์ž„ โœ— Uptime: 5s, 10s, 15s ``` --- ## ๐ŸŽฏ ํ•ด๊ฒฐ ์šฐ์„ ์ˆœ์œ„ ### 1์ˆœ์œ„: AutoHost ์ œ๊ฑฐ (๊ฐ€์žฅ ์ค‘์š”!) - ์ด๊ฒƒ์ด ๊ฐ€์žฅ ํ”ํ•œ ์›์ธ - ์™„์ „ํžˆ ์ œ๊ฑฐ ํ•„์š” ### 2์ˆœ์œ„: Monitor ๊ด€์ฐฐ - 5-10์ดˆ ๊ด€์ฐฐ - Server๊ฐ€ ์•ˆ์ •์ ์ธ์ง€ ํ™•์ธ ### 3์ˆœ์œ„: ํŒ€์› ํ…Œ์ŠคํŠธ - ์„ค์ •์ด ์•ˆ์ •์ ์ด๋ฉด ํ…Œ์ŠคํŠธ - ๋ฌธ์ œ ์ง€์†๋˜๋ฉด ์ถ”๊ฐ€ ์กฐ์น˜ ### 4์ˆœ์œ„: ๋„คํŠธ์›Œํฌ ๋กœ๊ทธ ๋ถ„์„ - Console์—์„œ ๊ฒฝ๊ณ /์—๋Ÿฌ ํ™•์ธ - Shutdown()์ด ์–ธ์ œ ํ˜ธ์ถœ๋˜๋Š”์ง€ ํŒŒ์•… --- ## ๐Ÿ’ก ์„ฑ๊ณตํ•˜๋ฉด ๋ณด๊ฒŒ ๋  ๊ฒƒ ``` Monitor: Server uptime: 60s+ yougetsignal: Port 4045 is open ํŒ€์›: ์ ‘์† ์„ฑ๊ณต! ๊ฒŒ์ž„: ํŒ€์› ํ”Œ๋ ˆ์ด์–ด ์Šคํฐ๋จ, ์‹œ์ž‘ ๊ฐ€๋Šฅ! ๐ŸŽ‰ ``` --- ## ๐Ÿ“ž ์ฐธ๊ณ  ์ด ๊ฐ€์ด๋“œ์˜ ๋ชจ๋“  ์„ค์ •์ด: - โœ… yougetsignal ์„ฑ๊ณต์œผ๋กœ ๊ฒ€์ฆ๋จ (์™ธ๋ถ€ ์ ‘๊ทผ ๊ฐ€๋Šฅ) - โœ… ํฌํŠธ ํฌ์›Œ๋”ฉ ์ž‘๋™ ์ค‘ - โœ… ๋ฐฉํ™”๋ฒฝ ํ—ˆ์šฉ - โœ… OS ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅ ํ˜„์žฌ ์œ ์ผํ•œ ๋ฌธ์ œ: - ์œ ๋‹ˆํ‹ฐ Netcode๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์„œ๋ฒ„๋ฅผ ์ค‘์ง€ - ํฌํŠธ๊ฐ€ 1-30์ดˆ ํ›„ ๋‹ซํž˜ ํ•ด๊ฒฐ์ฑ…: AutoHost ์ œ๊ฑฐ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ๋†’์Œ!