Unity/์œ ๋‹ˆํ‹ฐ ํฌํ†ค(๋„คํŠธ์›Œํฌ)

ํฌํ†ค ๋ฌด๋ฃŒ๋ฒ„์ „ ์‚ฌ์šฉํ•˜๊ธฐ(4) RPC

Rainbow๐ŸŒˆCoder 2022. 1. 5. 11:09
728x90

์œ ์ €๋“ค์ด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด

๋‹ค๋ฅธ ์œ ์ €๋“ค๋„ ๊ทธ ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ RPCํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

 

๊ฐ€๋ น, ์ด์•Œ ํ”„๋ฆฌํŽฉ์„ ์ƒ์„ฑ์‹œํ‚ค๋Š” FireBullet()์„ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์‹คํ–‰ํ•˜์˜€๊ณ ,

์ด ๋™์ž‘ ์ƒํƒœ๋ฅผ ๋‹ค๋ฅธ ํ”Œ๋ ˆ์ด์–ด๋“ค๋„ ๋ณด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

    [PunRPC]
    public void FireBullet()
    {
        Instantiate(Resources.Load<GameObject>("bullet"),transform.position,transform.rotation);
    }
            if(Input.GetKeyDown(KeyCode.Space))
            {
                //FireBullet();
                //ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๊ทธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋‹ค๋ฅธ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ „๋‹ฌ
                photonView.RPC("FireBullet",RpcTarget.AllViaServer);
            }

ํ’€์†Œ์Šค

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
                                                                                                //๊ด€์ธก ์ปจํŠธ๋กค๋Ÿฌ
                                                                                                //์ƒํƒœ๋ณ€ํ™” ๊ด€์ธกํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ์ฃผ๊ณ ๋ฐ›๊ณ 
public class playerController : MonoBehaviourPunCallbacks, IPunObservable
{

    private Vector3 curPos;
    private Quaternion curRot;
    void Start()
    {

    }
    void Update()
    {
        if(photonView.IsMine)//๋‚ด๊ฐ€ ํด๋ผ์ด์–ธํŠธ์ผ๋•Œ
        {
            //ํ‰์†Œ์— ๊ตฌํ˜„ํ•˜๋˜ ํ”Œ๋ ˆ์ด์–ด ๋กœ์ง์„ ์—ฌ๊ธฐ์—๋‹ค๊ฐ€ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.
            float v = Input.GetAxis("Vertical");
            float h = Input.GetAxis("Horizontal");

            Vector3 moveDir = (Vector3.forward * v) + (Vector3.right * h);
            transform.Translate(moveDir*Time.deltaTime*10f);

            if(Input.GetKeyDown(KeyCode.Space))
            {
                //FireBullet();
                //ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๊ทธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋‹ค๋ฅธ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ „๋‹ฌ
                photonView.RPC("FireBullet",RpcTarget.AllViaServer);
            }

        }
        else//๋‚ด๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ํ”Œ๋ ˆ์ด์–ด
        {
            //OnPhotonSerializeView()์˜ else์— ์žˆ๋Š” ๋‚ด์šฉ์„ ๋„ฃ์–ด์ค€๋‹ค
            transform.position = Vector3.Lerp(transform.position,curPos,Time.deltaTime*10f); //(1)๋„ฃ์–ด์คŒ
            transform.rotation = Quaternion.Lerp(transform.rotation,curRot,Time.deltaTime*10f); //(2) ๋„ฃ์–ด์คŒ
        }
    }

    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if(stream.IsWriting)//์“ฐ๋Š” ์ƒํƒœ, ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ๋‚˜์˜ ์ •๋ณด๋ฅผ ๋ณด๋ƒ„(์• ๋‹ˆ๋ฉ”์ด์…˜, ์ƒ‰๊น” ๋ณ€ํ™”.. ๋“ฑ๋“ฑ)
        {//๋ณด๋‚ด๊ธฐ
            stream.SendNext(transform.position);
            stream.SendNext(transform.rotation);
        }//๋ฐ›๊ธฐ
        else//๋ณด๋‚ธ๊ฑธ ๋˜‘๊ฐ™์ด ์ˆœ์„œ๋Œ€๋กœ ๋ฐ›์Œ
        {
            curPos = (Vector3)stream.ReceiveNext(); //(1)
            curRot = (Quaternion)stream.ReceiveNext(); //(2)
        }
    }

    [PunRPC]
    public void FireBullet()
    {
        Instantiate(Resources.Load<GameObject>("bullet"),transform.position,transform.rotation);
    }
}

ํ•ด๋‹น ๋ธ”๋กœ๊ทธ ์ผ๋ถ€ ์ฐธ๊ณ  ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

https://you-rang.tistory.com/search/%ED%8F%AC%ED%86%A4

728x90