센로그

[PUN2] PunRPC / PV.RPC 본문

게임/PUN2(Unity)

[PUN2] PunRPC / PV.RPC

seeyoun 2023. 1. 20. 21:09

◆ [PunRPC]

원격으로 호출할 수 있는 함수라는 의미.
내 RPC 함수를 실행할 때, 같은 포톤 뷰를 가진 원격 객체의 RPC 함수 또한 실행시켜준다. (상태가 일치하도록)
[PunRPC]
void RPC_TakeDamage(float damage)
{
    currentHealth -= damage;
}

함수 구현시 함수명 위에 [PunRPC] 를 붙여주면 RPC 함수가 된다.

 


◆ PhotonView.RPC(string, PhotonTargets,  params object[])

다른 클라이언트의 객체에 있는 함수를 실행함

실행할 함수명, 실행할 대상, 함수 파라미터[]를 넣어 호출한다.

 

조건 1) 다른 클라이언트의 객체도 PhotonView 컴포넌트를 가지고 있어야 함

조건 2) 호출될 함수에는 [PunRPC] 가 붙어있어야 함

 

 

[예시]

//데미지 동기화
    //공격자의 PC에서 TakeDamage 함수 호출
    public void TakeDamage(float damage)
    {
        //RpcTarget.All에게 자신의 RPC_TakeDamage함수 호출
        PV.RPC("RPC_TakeDamage", RpcTarget.All, damage);

    }

    [PunRPC]	//같은 포톤뷰 끼리 동기화
    void RPC_TakeDamage(float damage)
    {
        // 피해자 컴퓨터에서만 실행되도록 함. 실행 후 다른 컴퓨터들의 같은 포톤뷰 동기화
        if (!PV.IsMine)
            return;

        Debug.Log("took damage: " + damage);

        currentHealth -= damage;

        if(currentHealth <= 0)
        {
            Die();
        }
    }

    void Die()
    {
        playerManager.Die();
    }

 

※ 만약 RPC 함수의 내용이 재접속시에도 유지되어야 하는 정보라면, 호출시 RpcTarget.AllBuffered를 써야 한다. (.All 쓰면 재접시 사라짐)

Comments