This document is about: PUN 2
SWITCH TO

PUN Classic (v1)、PUN 2、Boltはメンテナンスモードとなっております。Unity2022についてはPUN 2でサポートいたしますが、新機能が追加されることはありません。お客様のPUNプロジェクトおよびBoltプロジェクトが停止することはなく、将来にわたってパフォーマンス性能が落ちることはありません。 今後の新しいプロジェクトについては、Photon FusionまたはQuantumへ切り替えていただくようよろしくお願いいたします。

Migration Notes

PUN 2はたくさんの互換性を破る変更とアップデートを一つのパッケージに統合したものですが、ご存知の通り全体的な使用方法はPUNと似ています。
PUN 1.xとは別のパッケージなのでいつアップデートするかは自身で決められます。また、いつでもPUNに戻れます。

もしPUN Plus (v1.x)を使用中でPUN 2にアップデートを希望される場合は、PUN 2 Freeパッケージでも既存のAppIDをそのまま使用してください。メリットは全て引き継がれます。

アップデートするにはPUNを完全に削除してPUN 2をクリーンインストールするのが、必要とされるAPIとロジックの変更に対応するのにベストな方法です。このページでは大幅な変更の確認ができますが、全てをカバーしているわけではありません。

概要

  • PUN 2にはRealtime APIが用意されていて利用できます。これはUnity指定ではありません。
  • 2つのレイヤのための特徴的なネームスペース( Photon.PunPhoton.Realtime)があります。
  • ベストリージョンセレクションとコールバックのシステムはRealtime API内で実行されるようになりました。
  • ConnectUsingSettings()のみがPhotonServerSettingsを使用しています。
  • 多くのコールバック、メソッド、およびフィールドの名前が様々な理由で変更されました。 詳細はこちら
  • コールバックの場合、クラスはインターフェースを実装し、インタレストがあるものとして登録する必要があります。 詳細はこちら
  • MonoBehaviourPunCallbacksはほとんどのコールバックを実装しているため、それらを継承およびオーバーライドできます。 詳細はこちら

APIの変更

  • PhotonNetwork.autoJoinLobby はなくなりました。ロビーが必要でない限り参加しないでください。
  • PhotonNetwork.GetRoomList() はなくなりました。
    ILobbyCallbacks.OnRoomListUpdate(List<RoomInfo> roomList)コールバックからルームのリストを呼び出して、任意でキャッシュ、更新、クリアできます。
    こちらのスニペットを御覧ください。
  • PhotonNetwork.FriendsListはなくなりました。IMatchmakingCallbacks.OnFriendListUpdate(List<FriendInfo> friendList)コールバックからフレンドリストを取得し任意でキャッシュできます。
  • PhotonNetwork.LobbyStatisticsはなくなりました。 有効にすると、 ILobbyCallbacks.OnLobbyStatisticsUpdate(List<TypedLobbyInfo> lobbyStatistics)コールバックからロビー統計リストを取得できます。 必要に応じて、オプションでキャッシュ、更新、クリアできます。
  • PhotonNetwork.connecting はなくなりました。
  • PhotonNetwork.connectionState はなくなりました。
  • PhotonNetwork.isNonMasterClientInRoom はなくなりました。
    • PhotonNetwork.autoCleanUpPlayerObjectsがなくなりました。PUN2では、この設定はグローバルではなく、ルームごとに行われます。
      ルームの作成時には、RoomOptions.CleanupCacheOnLeaveで設定できます。
      ルームに参加しているときは、PhotonNetwork.CurrentRoom.AutoCleanUpで設定できます。
  • PhotonNetwork.networkingPeer はなくなりました。 ここで処理していたタスクはPhotonNetworkクラス内もしくはPhotonNetwork.NetworkingClient内でダイレクトに処理されるようになりました。
  • PhotonNetwork.ConnectUsingSettings() gameVersionパラメーターを取らなくなりました。
    代わりに、PhotonServerSettingsのUnity Editorから設定されたAppVersionパラメーターは、AppSettingsセクションが PhotonNetwork.GameVersionとして使用されます。
    コードから PhotonNetwork.GameVersionを設定する場合は、次のいずれかを実行できます。
    • PhotonNetwork.ConnectUsingSettings()を呼び出したPhotonNetwork.GameVersionを設定
    • PhotonNetwork.ConnectUsingSettings()を呼び出す前に PhotonNetwork.PhotonServerSettings.AppSettings.AppVersionを設定
  • ConnectUsingSettings()のみがPhotonServerSettingsを利用しています。
    他の接続方法を使用する場合、アプリはAppIdおよびその他の値を手動で設定する必要があります(設定によってこれらの値が上書きされることはありません)。
  • ServerSettings.EnableLobbyStatisticsServerSettings.AppSettings.EnableLobbyStatisticsに移動されました。
  • ServerSettings.AppIDServerSettings.AppSettings.AppIdRealtimeに移動されました。
  • ServerSettings.VoiceAppIDServerSettings.AppSettings.AppIdVoiceに移動されました。
  • ServerSettings.ChatAppIDServerSettings.AppSettings.AppIdChatに移動されました。
  • ServerSettings.NetworkLoggingServerSettings.AppSettings.NetworkLoggingに移動されました。
  • ServerSettings.ServerAddressServerSettings.AppSettings.Serverに移動されました。
  • ServerSettings.ServerPortServerSettings.AppSettings.Portに移動されました。
  • ServerSettings.ProtocolServerSettings.AppSettings.Protocolに移動されました。
  • PUN2ではUserIdが設定されていない場合、ニックネームに設定されなくなりました。
    PUN1で設定されていました。
  • PhotonNetwork.LoadLevelAsync()はなくなりました。
    PUN2では設計によりPhotonNetwork.LoadLevelはデフォルトで常に非同期になりました。
    レベルのロードの進行状況を取得するには、 PhotonNetwork.LevelLoadingProgressを使用します。
    • PhotonNetwork.PhotonServerSettings.UseMyServer(server, port, app) はなくなりました。以下で置き換えられます。

      C#

      PhotonNetwork.PhotonServerSettings.AppSettings.Server = server;
      PhotonNetwork.PhotonServerSettings.AppSettings.Port = port;
      PhotonNetwork.PhotonServerSettings.AppSettings.RealtimeAppId = app; // either AppId or "master" or don't set anything
      

      Photon Server v4を使用している場合:
      PhotonNetwork.PhotonServerSettings.AppSettings.UserNameServer = false;
      Photon Server v5を使用している場合(ネームサーバーを使用することを推奨します。
      PhotonNetwork.PhotonServerSettings.AppSettings.UserNameServer = true;

ネームスペースの変更

  • RoomOptionsPhoton.Realtime ネームスペースにあります。
  • AuthenticationValuesPhoton.Realtime ネームスペースにあります。
  • RoomInfoPhoton.Realtimeネームスペースにあります。
  • RoomPhoton.Realtimeネームスペースにあります。
  • FriendInfoPhoton.Realtimeネームスペースにあります。
  • TypedLobbyInfoPhoton.Realtimeネームスペースにあります。
  • TypedLobbyPhoton.Realtimeネームスペースにあります。
  • LobbyTypePhoton.Realtimeネームスペースにあります。
  • RaiseEventOptionsPhoton.Realtimeネームスペースにあります。
  • WebRpcResponsePhoton.Realtimeネームスペースにあります。
  • IPunObservablePhoton.Pun ネームスペースにあります。

名称変更

camelCaseからPascalCaseへ

パブリックフィールドとプロパティ:

  • photonView.isMinephotonView.IsMineになりました。
  • photonView.ownerphotonView.Ownerになりました。
  • photonView.instantiationDataphotonView.InstantiationDataになりました。
  • PhotonNetwork.automaticallySyncScenePhotonNetwork.AutomaticallySyncSceneになりました。
  • PhotonNetwork.gameVersionPhotonNetwork.GameVersionになりました。
  • PhotonNetwork.masterClientPhotonNetwork.MasterClientになりました。
  • PhotonNetwork.isMasterClientPhotonNetwork.IsMasterClientになりました。
  • PhotonNetwork.inRoomPhotonNetwork.InRoomになりました。
  • PhotonNetwork.isMessageQueueRunningPhotonNetwork.IsMessageQueueRunningになりました。
  • PhotonNetwork.offlineModePhotonNetwork.OfflineModeになりました。
  • PhotonNetwork.countOfPlayersOnMasterPhotonNetwork.CountOfPlayersOnMasterになりました。
  • PhotonNetwork.countOfPlayersInRoomsPhotonNetwork.CountOfPlayersInRoomsになりました。
  • PhotonNetwork.countOfPlayersPhotonNetwork.CountOfPlayersになりました。
  • PhotonNetwork.countOfRoomsPhotonNetwork.CountOfRoomsになりました。
  • PhotonNetwork.sendRatePhotonNetwork.SendRateになりました。
  • PhotonNetwork.timePhotonNetwork.Timeになりました。
  • PhotonNetwork.playerListPhotonNetwork.PlayerListになりました。
  • PhotonNetwork.precisionForVectorSynchronizationPhotonNetwork.PrecisionForVectorSynchronizationになりました。
  • PhotonNetwork.precisionForQuaternionSynchronizationPhotonNetwork.PrecisionForQuaternionSynchronizationになりました。
  • PhotonNetwork.precisionForFloatSynchronizationPhotonNetwork.PrecisionForFloatSynchronizationになりました。
  • PhotonStream.isWritingPhotonStream.IsWritingになりました。
  • PhotonStream.isReadingPhotonStream.IsReadingになりました。
  • RoomOptions.cleanUpCacheOnLeaveRoomOptions.CleanupCacheOnLeaveになりました。
  • RoomOptions.publishUserIdRoomOptions.PublishUserIdになりました。
  • RoomOptions.suppressRoomEventsRoomOptions.SuppressRoomEventsになりました。

その他

  • PhotonNetwork.connectedPhotonNetwork.IsConnectedになりました。
  • PhotonNetwork.connectedAndReadyPhotonNetwork.IsConnectedAndReadyになりました。
  • PhotonNetwork.networkingPeerPhotonNetwork.NetworkingClientになりました。
  • PhotonNetwork.connectionStateDetailedPhotonNetwork.NetworkClientStateになりました。
  • PhotonNetwork.playerNamePhotonNetwork.NickNameになりました。
  • PhotonNetwork.roomPhotonNetwork.CurrentRoomになりました。
  • PhotonNetwork.lobbyPhotonNetwork.CurrentLobbyになりました。
  • PhotonNetwork.playerPhotonNetwork.LocalPlayerになりました。
  • PhotonNetwork.insideLobbyPhotonNetwork.InLobbyになりました。
  • PhotonNetwork.otherPlayersPhotonNetwork.PlayerListOthersになりました。
  • PhotonNetwork.sendRateOnSerializePhotonNetwork.SerializationRateになりました。
  • PhotonNetwork.versionPUNPhotonNetwork.PunVersionになりました。
  • PhotonTargetsenumはRpcTargetになりました。
  • PhotonPlayerクラスはPhoton.Realtime.Playerになりました。
  • PhotonPlayer.IDPhoton.Realtime.Player.ActorNumberになりました。

コールバックの変更

コールバックについての詳細はこちらのページを参照してください。

  • IPunInstantiateMagicCallbackを除くすべてのコールバックインターフェースは登録され、また登録解除されなければなりません。
    PhotonNetwork.AddCallbackTarget(this)PhotonNetwork.RemoveCallbackTarget(this)を呼び出してください。 (それぞれOnEnable()OnDisable()の中で)。

Photon.PunBehaviourMonoBehaviourPunCallbacksと置き換えてください。
MonoBehaviourPunCallbacksのためにOnEnabled()OnDisable()を上書きするときは、毎回ベースクラスのメソッドを呼び出してください。

  • PhotonNetwork.OnEventCallはなくなりました
    2つのオプションがあります:

    1. 代わりにPhotonNetwork.NetworkingClient.EventReceived(EventData)を使用。
    2. IOnEventCallback.OnEvent(EventData)を使用。

    PUN2では、イベントコールバックのシグネチャが変更されましたが、 EventDataから必要なものを取得できます。
    また、イベントコールバックは、カスタムイベント(カスタムイベントコード<200)だけでなく、すべてのイベントに対してトリガーされます。

    • デフォルトでPUN Classicでの設定とは異なります。オンラインルームに参加しても、送信者/設定者クライアント(プロパティを設定したアクター)にプロパティの設定が反映されないようになっています。
      代わりに、送信者/設定者のクライアント(プロパティを設定するアクター)はローカルで変更を適用/設定するためにサーバイベント PropertiesChangedを持つようになりました。
      OnPlayerPropertiesUpdateまたはOnRoomPropertiesUpdateコールバックがローカルクライアントにトリガーされるまで待つ必要があります。
      この新しい動作は、新しいルームオプションフラグroomOptions.BroadcastPropsChangeToAllの導入によるもので、デフォルトでは true に設定されています。
      理由は、先にローカルでプロパティを設定してからサーバー上やルームの他のアクターに対して設定するリクエストを送信すると、プロパティが正常に同期されない可能性があるからです。
      後者は失敗する可能性があり、送信者/設定者クライアント(プロパティを設定するアクター)のプロパティが、サーバ上や他のクライアント上のものとは異なるものになってしまうかもしれません。
      以前のような動作(サーバーにリクエストを送る前にローカルでプロパティを設定して同期させる)をさせるには、ルームを作成する前に roomOptions.BroadcastPropsChangeToAllfalseに設定します。
      しかし、これはお勧めできません。

    • PUN2は、OnRoomPropertiesUpdatedOnPlayerPropertiesUpdatedコールバックを、SetPropertiesの呼び出しで変更しない限り、トリガーしません。
      PUN2では、ルームに入る際(ルームを作成、参加、再入室した後)、OnPlayerPropertiesUpdateOnRoomPropertiesUpdateコールバックは初期化されたプロパティに対してはトリガーされません。
      初期値にアクセスするには、PhotonNetwork.CurrentRoom.CustomProperties(またはPhotonNetwork.CurrentRoomの他のクラスプロパティ、IsOpenIsVisibleMaxPlayersなど)またはPhotonNetwork.LocalPlayer.CustomPropertiesを使用します。

以下の表で、メソッドパラメータが表示されるのは、PUN1とPUN2の間でメソッドのシグネチャが異なる場合のみです。

PUN 1 (コールバック) PUN 2 (インターフェイス | コールバック)
OnConnectedToPhoton IConnectionCallbacks OnConnected
OnFailedToConnectToPhoton() IConnectionCallbacks OnDisconnected(DisconnectCause)
OnConnectionFail() IConnectionCallbacks OnDisconnected(DisconnectCause)
OnDisconnectedFromPhoton() IConnectionCallbacks OnDisconnected(DisconnectCause)
OnConnectedToMaster IConnectionCallbacks OnConnectedToMaster
OnPhotonMaxCccuReached() IConnectionCallbacks OnDisconnected(DisconnectCause)
OnCustomAuthenticationFailed IConnectionCallbacks OnCustomAuthenticationFailed
OnCustomAuthenticationResponse IConnectionCallbacks OnCustomAuthenticationResponse
OnMasterClientSwitched(PhotonPlayer) IInRoomCallbacks OnMasterClientSwitched(Player)
OnPhotonPlayerConnected(PhotonPlayer) IInRoomCallbacks OnPlayerEnteredRoom(Player)
OnPhotonPlayerDisconnected(PhotonPlayer) IInRoomCallbacks OnPlayerLeftRoom(Player)
OnPhotonPlayerActivityChanged(PhotonPlayer) IInRoomCallbacks OnPlayerEnteredRoom(Player)
OnPlayerLeftRoom(Player)
OnPhotonCustomRoomPropertiesChanged IInRoomCallbacks OnRoomPropertiesUpdate
OnPhotonPlayerPropertiesChanged(object[]) IInRoomCallbacks OnPlayerPropertiesUpdate(Player, Hashtable)
OnJoinedLobby ILobbyCallbacks OnJoinedLobby
OnLeftLobby ILobbyCallbacks OnLeftLobby
OnReceivedRoomListUpdate() ILobbyCallbacks OnRoomListUpdate(List<RoomInfo>)
OnLobbyStatisticsUpdate() ILobbyCallbacks OnLobbyStatisticsUpdate(List<TypedLobbyInfo>)
OnLeftRoom IMatchmakingCallbacks OnLeftRoom
OnPhotonCreateRoomFailed(object[]) IMatchmakingCallbacks OnCreateRoomFailed(short, string)
OnPhotonJoinRoomFailed(object[]) IMatchmakingCallbacks OnJoinRoomFailed(short, string)
OnCreatedRoom IMatchmakingCallbacks OnCreatedRoom
OnJoinedRoom IMatchmakingCallbacks OnJoinedRoom
OnPhotonRandomJoinFailed(object[]) IMatchmakingCallbacks OnJoinRandomFailed(short, string)
OnUpdatedFriendList() IMatchmakingCallbacks OnFriendListUpdate(List<FriendInfo>)
- IOnEventCallbackOnEvent(EventData)
OnPhotonInstantiate IPunInstantiateMagicCallback OnPhotonInstantiate
OnPhotonSerializeView IPunObservable OnPhotonSerializeView
OnOwnershipRequest(object[]) IPunOwnershipCallbacks OnOwnershipRequest(PhotonView, Player)
OnOwnershipTransfered(object[]) IPunOwnershipCallbacks OnOwnershipTransfered(PhotonView, Player)
OnWebRpcResponse IWebRpcCallback OnWebRpcResponse
Back to top