RPC
RPC 주의점
1. 플레이어 간에 게임 플레이 상호작용이 아닌 바로 없어져 버리는 것들의 전송 - RPC 사용O
2. 시기가 중요하지 않은 상점 내 구매(호출한 플레이어에게만 중요한 구매 - 자금감소, 인벤토리 추가) - RPC 사용 X
3. 이름, 색상, 스킨과 같은 초기 설정 - RPC 사용O
4. 게임 모드, 준비상태 - RPC 사용O
RPC 호출해보기
RPC는 틱 정렬이 되지 않으므로 FixedUpdateNetwork() 등 Fusion 입력 처리를 사용할 필요가 없다.
void Update()
{
// Object.HasInputAuthority는 NetworkObject.Spawn()에서 생성할 때 파라미터로 Runner를 정해주는데 결국 생성이 되었냐에 대한 것이다.
if (Object.HasInputAuthority && Input.GetKeyDown(KeyCode.R))
{
RPC_SendMessage("Hey Mate!");
}
}
RPC 속성 사용
- string을 받아와서 rpc의 info가 로컬이면 You said~ 아니면 Some other said ~ 로 텍스트를 출력한다.(누가 호출했는지)
// RpcSources : 전송할 수 있는 피어
// RpcTargets : 피어가 실행되는 피어
// 1. All : 모두에게 전송 / 세션 내의 모든 피어에 의해서 실행됨(서버 포함)
// 2. Proxies : 나 말고 전송 / 객체에 대하여 입력 권한 또는 상태 권한을 갖고 있지 않는 피어에 의해 실행됨
// 3. InputAuthority : 입력 권한 있는 피어만 전송 / 객체에 대한 입력 권한이 있는 피어에 의해 실행됨
// 4. StateAuthority : 상태 권한 있는 피어만 전송 / 객체에 대한 상태 권한이 있는 피어에 의해 실행됨
// RpcInfo
// - Tick : 어떤 곳에서 틱이 전송되었는지
// - Source : 어떤 플레이어(PlayerRef)가 보냈는지
// - Channel : Unrealiable 또는 Reliable RPC로 보냈는지 여부
// - IsInvokeLocal : 이 RPC를 원래 호출한 로컬 플레이어인지의 여부
// * 공식 문서엔 HostMode를 설정하지 않았지만 이걸 쓰지 않으면 계속 원격 플레이어가 된다. (기본이 서버 모드여서 그런 듯)
[Rpc(RpcSources.All, RpcTargets.InputAuthority, HostMode = RpcHostMode.SourceIsHostPlayer)]
public void RPC_SendMessage(string message, RpcInfo info = default)
{
if (!_messages)
{
_messages = FindObjectOfType<Text>();
}
Debug.Log(info.Channel);
Debug.Log(info.Source.RawEncoded);
Debug.Log(info.Source.PlayerId);
Debug.Log(Runner.Simulation.LocalPlayer.PlayerId);
if (info.Source == Runner.Simulation.LocalPlayer)
{
message = $"You said: {message}\n";
}
else
{
message = $"Some other player said: {message}\n";
}
_messages.text += message;
}
추가 RPC 속성
https://doc.photonengine.com/ko-KR/fusion/current/manual/rpc
Remote Procedure Calls | Photon Engine
doc.photonengine.com

'공부 모음 > 포톤 퓨전 시작해보기' 카테고리의 다른 글
포톤 퓨전 속성 변경 (0) | 2022.12.09 |
---|---|
포톤 퓨전 물리 (2) | 2022.12.08 |
포톤 퓨전 Prediction (0) | 2022.12.08 |
포톤 퓨전 시작하기, 씬 설정하기 (0) | 2022.12.07 |