๐ŸŒ RPC์™€ ๋„คํŠธ์›Œํฌ ๊ฒŒ์ž„ ๊ธฐ์ดˆ – ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๋™๊ธฐํ™” ์ดํ•ดํ•˜๊ธฐ

 ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„์„ ๋งŒ๋“ค๋ ค๋ฉด, ํ”Œ๋ ˆ์ด์–ด ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๊ฐ€ ํ•„์ˆ˜๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด์„ ์˜๋ฉด B ํ”Œ๋ ˆ์ด์–ด ํ™”๋ฉด์—๋„ ๊ฐ™์€ ์žฅ๋ฉด์ด ๋ณด์—ฌ์•ผ ํ•œ๋‹ค.
์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•ต์‹ฌ ๊ฐœ๋…์ด **RPC(Remote Procedure Call)**์ด๋‹ค.


1. RPC๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

  • ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ(Remote Procedure Call)

  • ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์„œ๋ฒ„์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ → ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„์—์„œ ์‹คํ–‰

  • ์ฆ‰, ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•

์˜ˆ์‹œ

  • ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ ํ”„ → Jump() ํ•จ์ˆ˜ ํ˜ธ์ถœ

  • RPC๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„/๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์—์„œ๋„ Jump() ์‹คํ–‰


2. Unity์—์„œ RPC ์‚ฌ์šฉ

Unity์—์„œ๋Š” Mirror, Photon ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ RPC ์ œ๊ณต

Photon ์˜ˆ์ œ

[PunRPC] void Jump() { Rigidbody rb = GetComponent<Rigidbody>(); rb.AddForce(Vector3.up * jumpForce); } // ํ˜ธ์ถœ photonView.RPC("Jump", RpcTarget.All);
  • [PunRPC]: ๋„คํŠธ์›Œํฌ์—์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜ ํ‘œ์‹œ

  • RpcTarget.All: ์ž์‹ ๊ณผ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘์—์„œ ์‹คํ–‰


3. ๋„คํŠธ์›Œํฌ ๊ฒŒ์ž„ ๋™๊ธฐํ™” ๊ธฐ๋ณธ

  • Transform ๋™๊ธฐํ™”: ์œ„์น˜, ํšŒ์ „, ์• ๋‹ˆ๋ฉ”์ด์…˜

  • ์ƒํƒœ ๋™๊ธฐํ™”: ์ฒด๋ ฅ, ์ ์ˆ˜, ์•„์ดํ…œ ํš๋“

  • ์ด๋ฒคํŠธ ๋™๊ธฐํ™”: ๊ณต๊ฒฉ, ์Šคํ‚ฌ, ์ ํ”„ ๋“ฑ

๐Ÿ’ก TIP:

  • ์ค‘์š”ํ•œ ์ƒํƒœ → ์„œ๋ฒ„ ๊ถŒํ•œ(Server Authority)

  • ๋น„์ค‘์š” ์ƒํƒœ → ํด๋ผ์ด์–ธํŠธ ์˜ˆ์ธก(Client Prediction)


4. ์‹ค์ „ ํŒ

  • ๋„คํŠธ์›Œํฌ ์ง€์—ฐ(Latency) ๊ณ ๋ ค → ๋ณด๊ฐ„(Interpolation) ์‚ฌ์šฉ

  • ํŒจํ‚ท ์ตœ์†Œํ™” → ๋งค ํ”„๋ ˆ์ž„ ์ „์†กX, ์ผ์ • ๊ฐ„๊ฒฉ ์ „์†ก

  • ๋ณด์•ˆ → ํด๋ผ์ด์–ธํŠธ ๊ถŒํ•œ์œผ๋กœ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๊ธˆ์ง€


5. ๋งˆ๋ฌด๋ฆฌ

RPC์™€ ๋„คํŠธ์›Œํฌ ๋™๊ธฐํ™”๋Š” ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ์ด๋‹ค.

  • ํ”Œ๋ ˆ์ด์–ด ํ–‰๋™ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€

  • ์ง€์—ฐ๊ณผ ๋ถ€ํ•˜ ์ตœ์†Œํ™” → ๋ถ€๋“œ๋Ÿฌ์šด ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด ๊ฒฝํ—˜

๐Ÿ‘‰ ๋‹ค์Œ ๊ธ€์—์„œ๋Š” ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜ ์ฑ„ํŒ… ์‹œ์Šคํ…œ ๊ตฌํ˜„์„ ๋‹ค๋ค„, ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„์—์„œ ์†Œ์…œ ๊ธฐ๋Šฅ๊นŒ์ง€ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

๋Œ“๊ธ€

์ด ๋ธ”๋กœ๊ทธ์˜ ์ธ๊ธฐ ๊ฒŒ์‹œ๋ฌผ

๐Ÿ—„️ ๊ฒŒ์ž„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ – ์ธ๋ฒคํ† ๋ฆฌ, ๋žญํ‚น, ์„ธ์ด๋ธŒ ์‹œ์Šคํ…œ

๐Ÿ”’ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๋ณด์•ˆ ๊ฐ•ํ™” – ์น˜ํŠธ ๋ฐฉ์ง€์™€ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ

๐Ÿš€ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„ ์ตœ์ ํ™”์™€ ์„ฑ๋Šฅ ํŠœ๋‹ – ๋ถ€๋“œ๋Ÿฌ์šด ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด ๊ตฌํ˜„