PUN Classic (also called PUN1) is the original and first major version of PUN. It is now replaced by PUN2 which is refactored and enhanced. We highly recommend starting new projects with PUN2 and if possible migrating existing ones from PUN1 to PUN2 by following our "Migration Notes". PUN Classic will be maintained for the coming months. We will fix important bugs and support new Unity versions but new features will be added only to PUN2.

ターンベースゲームデモ

Photon Unity Networking(PUN)は、ストラテジーゲームやボードゲームといったターンベースゲームに用いることができます。このドキュメントでは、PUNパッケージに含まれているRock Paper Scissorsデモの説明をもとに、ターンベースゲームを実装する方法の概要について説明します。

このデモには、PunTurnManager、RpsCore、RpsDemoConnectなどのコンポーネントスクリプトが含まれます。

PunTurnManager

PunTurnManagerは包括的なコンポーネントクラスで、類似したゲームやロジックで再利用されます。必須ではありませんが、ターンベースゲームを高速で動かすためのシンプルかつ便利なラッパーがあると便利です。より複雑かつオリジナリティのあるゲームプレイを築く上で、良い出発点となるでしょう。

データ保存については、PunTurnManagerはゲームデータをゲームのライフサイクル内で保存するのに非常に効率的な方法である Room Custom Propertiesに完全に依存しています。 追加の機能やデータが必要である場合、ゲームに関連するデータの定義、読み込み、書き込みのために、 Room Custom Propertiesを拡張することを強く推奨します。 また、 Room Custom Propertiesのデータを得るためサードパーティのシステムの為に[Webhook]を用いることもできます。[Webhook]を用いるだけで、データを外部ストレージに保存する必要なしに、ハイスコアやお知らせの送信、統計値の維持を行うことができます。

Back To Top

IPunTurnManagerCallbacks

IPunTurnManagerCallbacksインターフェースによって、主要なターンベースメッセージのコールバックをリッスンすることができます。PunTurnManagerを結合する方法については、 RpsCoreスクリプトを参照してください。

これらのコールバックを正しくリッスンし、現在のすべてのクライアントについてトラッキングを保持することは、ターンベース管理をするうえで非常に重要です。ゲームの成果を把握するには、コールバックのリッスンを重視する必要があります。

Back To Top

TurnManagerの拡張

PUNのさまざまなクラスで、新たなプロパティやメソッドがターンベースシステム用に特別に設計された拡張として追加されています。これらの拡張はTurnExtensionsクラスのPunTurnManager.csで宣言されています。 これによって、簡潔なAPIが提供され、コードの読解がさらに容易になっています。

特定のニーズを満たすには、独自の拡張を作成してください。特に、ルームゲームロジックでプレイヤーやルームのカスタムプロパティの使用を非表示にするのに役立ちます。これによって、プロジェクトが複雑化しても柔軟性を高め、リファクタリングを容易におこなうことが可能になります。

Back To Top

RpsCore

RpsCoreコンポーネントスクリプトはこのデモ専用で、典型的なじゃんけんゲームに必要なルールとデータを実装しています。このスクリプトは、ビジュアルインターフェース、ゲームロジック、PunTurnManager間を仲介しています。

このスクリプトはPunTurnManagerを処理し、すべてのコールバックを実装します。また、多様なUIエレメントを管理して、ゲームの現状を反映します。さらに、ユーザー入力も処理します。 包括的な部分、ゲームによって必要性が異なる部分について認識しておくことは常に重要です。新しい機能を開発する際には、この点に常に留意してください。

Back To Top

RpsDemoConnect

RpsDemoConnectコンポーネントは接続や、ルームおよびロビーへの参加をおこなううえで、通常のPUNに非常に似ています。 ただし、このコンポーネントには非常に重要な機能が含まれています。ターンベースゲームに必須であるルームへの参加機能です。概念としては、ユーザーがプレイしているルームをトラッキングして、以前接続していたルームの検知や再接続、再参加を実現します。

これはPhotonNetwork.ReJoinRoom(string roomName) を使用して実施され、コールに正常に再参加できるかはRoomOptions.PlayerTtl (プレイヤーの持続時間) に依存しています。たとえば、数日間の切断をゲームで許容する場合にはRoomOptions.PlayerTtl を"(日数)* 24 * 60 * 60 * 1000"に設定する必要があります。

RpsDemoConnectコンポーネントは、接続とプレイの基本的な要件を満たします。実際のプロジェクトでは、さまざまな接続ステータスやロビー、フレンドリストなどのすべてのソーシャル機能についてより多くのフィードバックを提供するため、このコンポーネントを拡張する必要性が生じます。ゲーム開発ではこの要件は、ほとんどのネットワークゲームやターンベース、非ターンベースゲームに共通します。

Back To Top

必須事項と禁止事項

PUNを使用してターンベースゲームを作成する際には、PUN機能を正しく使用する点と、ターンベースではサポートされない機能を回避する点が重要です。

Do's 必須事項

  • ルーム作成時には RoomOptions.PlayerTtl を正しく設定してください。
  • ルーム作成時にはRoomOptions.EmptyRoomTtlを正しく設定してください。通常はRoomOptions.PlayerTtlのみが必要ですが、これによってセットアップの柔軟性が高まります。
  • ルームプロパティを使用して、実行中のゲームに固有なデータをトラッキングしてください。
  • プレイヤーセッション間で持続が必要なプレイヤーデータのトラッキングを保持するため、カスタムプレイヤープロパティを使用してください。
  • プレイヤーのトラッキングを維持するため、PhotonPlayer.ID を使用してください。
  • プレイヤー間でターンのやり取りを繰り返すため、PhotonPlayer.GetNext() を使用してください。
  • PunPlayerScores拡張を使用し、必要に応じてさらに複雑なスコアまたはデータ管理を作成してください。
  • プレイヤーをルーム内でインアクティブにすることが可能です。現在どのプレイヤーがオンラインでないかを把握するには、 PhotonPlayer.IsInactiveを確認してください。

Back To Top

禁止事項

-PhotonViewコンポーネントや派生物は使用しないでください。オーナーがインアクティブな場合(ルームにいない場合)、PUNはこれらの管理を引き渡します。 - PhotonViewが必要なためPunRPCは使用しないでください。代わりにPhotonNetwork.RaiseEventを使用してください。

To Document Top