This document is about: V3 CLIENT SERVER
SWITCH TO

RPCs - 使用例

RPCは、クライアント間で一時的なイベントをトリガーする仕組みです。ここで紹介するパターンはよく使用されるものです。このページは、RPC 基礎を理解していることを前提としています。

クライアントからサーバーへのリクエスト

ゲームステートは、クライアントではなくシミュレーションサーバーが管理します。クライアントが何かを実行したい場合は、実行したい操作をブロードキャストRPCとしてパッケージ化し、マスタークライアント(サーバー)に検証と実行を任せます。

代表的なリクエスト:

  • 選択したペイロードのキャラクターをスポーンする - マスタークライアントはリクエストを受信して検証を行った後、リクエスト元に代わって(装備・クラス・コスチュームなどを選択した)キャラクターをスポーンします。
  • 近くの取得可能なアイテムを回収する - 範囲内に入ったクライアントが回収リクエストを送信し、サーバーは距離と取得可能性を確認し、リクエストを適用します。

スポーンリクエストパターンの完全に動作するコードは、クイックスタートガイド(ステップ 5)で示されているので、これをテンプレートとして活用してください。

サーバーから全クライアントへの通知

RPCはキャッシュされないため、呼び出し後に参加したプレイヤーには届きません。そのため、RPCは途中参加者が知る必要のない短期間の通知に適しています:

  • ヒットエフェクトやキルログの情報
  • ラウンド開始やカウントダウンの合図
  • サーバーサイドイベントによってトリガーされる単発の視覚エフェクト

途中参加者にも通知する必要があるものは、複製したプロパティに格納してください。すると、途中参加者はスポーン時に最新の値を受け取ることができます。RPCは一時的な通知のみに使用してください。

共通パターン

テキストチャット

チャットはブロードキャストRPCに最適です。あるクライアントが送信して全員が受信する仕組みで、途中参加者への対応は不要です。

GDScript

func _ready():
    Fusion.register_broadcast_receiver(self)

func _exit_tree():
    if Fusion:
        Fusion.unregister_broadcast_receiver(self)

@rpc("any_peer", "call_local")
func chat_message(sender: String, text: String):
    $ChatPanel.append_line("[%s]: %s" % [sender, text])

func send_chat(text: String):
    Fusion.rpc(chat_message, local_player_name, text)

製品レベルのチャット機能をお探しの場合は、Photon Chatをご覧ください。これはPhotonの別製品で、互換性のあるサードパーティーサービスとの連携によって、AIモデレーションや単語フィルタリングなどの機能を備えています。

UIや単発エフェクト

一時的な効果(サウンド・爆発パーティクル・画面フラッシュ・トースト通知など)は、RPCに最適です。コード分岐せずに送信元でも効果を発生させたい場合は、@rpcアノテーション内で"call_local"を使用してください。

参考リンク

Back to top