한 플레이어에게만 보내면 되는 함수가 있을경우 대상 플레이어게만 RPC를 보내면 네트워크 대역폭과 처리량을 절약할 수 있어서 게임의 성능과 안정성을 향상시킬 수 있습니다. 이번 글에서는 특정 플레이어게만 RPC를 보내는 방법을 다루겠습니다.
✅ 구현(스크립트 작성)
· 전역 함수
using UnityEngine;
using Photon.Pun;
public class UtilityManager : MonoBehaviour
{
...
// 닉네임을 가진 플레이어에게만 RPC를 호출하는 함수
public static void CallRpcForPlayerWithName(string rpcMethodName, string targetPlayerName, params object[] parameters)
{
PhotonView? photonView = null;
foreach (PhotonView pv in PhotonNetwork.PhotonViewCollection)
{
Debug.Log(pv.Owner.NickName + " " + targetPlayerName);
if (pv.Owner.NickName == targetPlayerName)
{
photonView = pv;
break;
}
}
if(photonView == null)
{
Debug.Log($"{targetPlayerName}을 찾을 수 없음");
return;
}
else
{
// RPC 호출
photonView.RPC(rpcMethodName, photonView.Owner, parameters);
}
}
...
}
- UtilityManager이라는 이름으로 게임 디버그 및 유용한 함수를 전역으로 정의하였습니다.
PhotonView? photonView = null;
- 포톤 뷰를 가져오기 위해 선언합니다.
foreach (PhotonView pv in PhotonNetwork.PhotonViewCollection)
- 현재 접속중인 플레이어를 검사하여 대상의 닉네임과 동일한 대상을 찾습니다.
// RPC 호출
photonView.RPC(rpcMethodName, photonView.Owner, parameters);
- 포톤 뷰를 찾아 대상이 있다면, 그 대상에게만 RPC를 호출합니다.
✅ 사용 예시
/// <summary>
///
/// </summary>
/// <param name="nickName"></param>
/// <param name="isOn"></param>
public void ToggleMuteTargetForce(string nickName, bool isOn)
{
UtilityManager.CallRpcForPlayerWithName("ToggleMute", nickName, isOn);
}
- 관리자가 특정 대상의 보이스챗을 강제로 Mute하기위한 함수입니다.
- 클라이언트의 로컬 자신이 Mute 처리하는것은 한명에게만 이루어지면 되기에 단일 RPC 호출을 사용합니다.
'server > unity_photon' 카테고리의 다른 글
[유니티] 포톤(Photon) - 닉네임 동기화 및 시각화 (0) | 2022.10.24 |
---|
한 플레이어에게만 보내면 되는 함수가 있을경우 대상 플레이어게만 RPC를 보내면 네트워크 대역폭과 처리량을 절약할 수 있어서 게임의 성능과 안정성을 향상시킬 수 있습니다. 이번 글에서는 특정 플레이어게만 RPC를 보내는 방법을 다루겠습니다.
✅ 구현(스크립트 작성)
· 전역 함수
using UnityEngine;
using Photon.Pun;
public class UtilityManager : MonoBehaviour
{
...
// 닉네임을 가진 플레이어에게만 RPC를 호출하는 함수
public static void CallRpcForPlayerWithName(string rpcMethodName, string targetPlayerName, params object[] parameters)
{
PhotonView? photonView = null;
foreach (PhotonView pv in PhotonNetwork.PhotonViewCollection)
{
Debug.Log(pv.Owner.NickName + " " + targetPlayerName);
if (pv.Owner.NickName == targetPlayerName)
{
photonView = pv;
break;
}
}
if(photonView == null)
{
Debug.Log($"{targetPlayerName}을 찾을 수 없음");
return;
}
else
{
// RPC 호출
photonView.RPC(rpcMethodName, photonView.Owner, parameters);
}
}
...
}
- UtilityManager이라는 이름으로 게임 디버그 및 유용한 함수를 전역으로 정의하였습니다.
PhotonView? photonView = null;
- 포톤 뷰를 가져오기 위해 선언합니다.
foreach (PhotonView pv in PhotonNetwork.PhotonViewCollection)
- 현재 접속중인 플레이어를 검사하여 대상의 닉네임과 동일한 대상을 찾습니다.
// RPC 호출
photonView.RPC(rpcMethodName, photonView.Owner, parameters);
- 포톤 뷰를 찾아 대상이 있다면, 그 대상에게만 RPC를 호출합니다.
✅ 사용 예시
/// <summary>
///
/// </summary>
/// <param name="nickName"></param>
/// <param name="isOn"></param>
public void ToggleMuteTargetForce(string nickName, bool isOn)
{
UtilityManager.CallRpcForPlayerWithName("ToggleMute", nickName, isOn);
}
- 관리자가 특정 대상의 보이스챗을 강제로 Mute하기위한 함수입니다.
- 클라이언트의 로컬 자신이 Mute 처리하는것은 한명에게만 이루어지면 되기에 단일 RPC 호출을 사용합니다.
'server > unity_photon' 카테고리의 다른 글
[유니티] 포톤(Photon) - 닉네임 동기화 및 시각화 (0) | 2022.10.24 |
---|