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.PunとPhoton.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.EnableLobbyStatisticsはServerSettings.AppSettings.EnableLobbyStatisticsに移動されました。ServerSettings.AppIDはServerSettings.AppSettings.AppIdRealtimeに移動されました。ServerSettings.VoiceAppIDはServerSettings.AppSettings.AppIdVoiceに移動されました。ServerSettings.ChatAppIDはServerSettings.AppSettings.AppIdChatに移動されました。ServerSettings.NetworkLoggingはServerSettings.AppSettings.NetworkLoggingに移動されました。ServerSettings.ServerAddressはServerSettings.AppSettings.Serverに移動されました。ServerSettings.ServerPortはServerSettings.AppSettings.Portに移動されました。ServerSettings.ProtocolはServerSettings.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 anythingPhoton Server v4を使用している場合:
PhotonNetwork.PhotonServerSettings.AppSettings.UserNameServer = false;
Photon Server v5を使用している場合(ネームサーバーを使用することを推奨します。
PhotonNetwork.PhotonServerSettings.AppSettings.UserNameServer = true;
ネームスペースの変更
RoomOptionsはPhoton.Realtimeネームスペースにあります。AuthenticationValuesはPhoton.Realtimeネームスペースにあります。RoomInfoはPhoton.Realtimeネームスペースにあります。RoomはPhoton.Realtimeネームスペースにあります。FriendInfoはPhoton.Realtimeネームスペースにあります。TypedLobbyInfoはPhoton.Realtimeネームスペースにあります。TypedLobbyはPhoton.Realtimeネームスペースにあります。LobbyTypeはPhoton.Realtimeネームスペースにあります。RaiseEventOptionsはPhoton.Realtimeネームスペースにあります。WebRpcResponseはPhoton.Realtimeネームスペースにあります。IPunObservableはPhoton.Punネームスペースにあります。
名称変更
camelCaseからPascalCaseへ
パブリックフィールドとプロパティ:
photonView.isMineはphotonView.IsMineになりました。photonView.ownerはphotonView.Ownerになりました。photonView.instantiationDataはphotonView.InstantiationDataになりました。PhotonNetwork.automaticallySyncSceneはPhotonNetwork.AutomaticallySyncSceneになりました。PhotonNetwork.gameVersionはPhotonNetwork.GameVersionになりました。PhotonNetwork.masterClientはPhotonNetwork.MasterClientになりました。PhotonNetwork.isMasterClientはPhotonNetwork.IsMasterClientになりました。PhotonNetwork.inRoomはPhotonNetwork.InRoomになりました。PhotonNetwork.isMessageQueueRunningはPhotonNetwork.IsMessageQueueRunningになりました。PhotonNetwork.offlineModeはPhotonNetwork.OfflineModeになりました。PhotonNetwork.countOfPlayersOnMasterはPhotonNetwork.CountOfPlayersOnMasterになりました。PhotonNetwork.countOfPlayersInRoomsはPhotonNetwork.CountOfPlayersInRoomsになりました。PhotonNetwork.countOfPlayersはPhotonNetwork.CountOfPlayersになりました。PhotonNetwork.countOfRoomsはPhotonNetwork.CountOfRoomsになりました。PhotonNetwork.sendRateはPhotonNetwork.SendRateになりました。PhotonNetwork.timeはPhotonNetwork.Timeになりました。PhotonNetwork.playerListはPhotonNetwork.PlayerListになりました。PhotonNetwork.precisionForVectorSynchronizationはPhotonNetwork.PrecisionForVectorSynchronizationになりました。PhotonNetwork.precisionForQuaternionSynchronizationはPhotonNetwork.PrecisionForQuaternionSynchronizationになりました。PhotonNetwork.precisionForFloatSynchronizationはPhotonNetwork.PrecisionForFloatSynchronizationになりました。PhotonStream.isWritingはPhotonStream.IsWritingになりました。PhotonStream.isReadingはPhotonStream.IsReadingになりました。RoomOptions.cleanUpCacheOnLeaveはRoomOptions.CleanupCacheOnLeaveになりました。RoomOptions.publishUserIdはRoomOptions.PublishUserIdになりました。RoomOptions.suppressRoomEventsはRoomOptions.SuppressRoomEventsになりました。
その他
PhotonNetwork.connectedはPhotonNetwork.IsConnectedになりました。PhotonNetwork.connectedAndReadyはPhotonNetwork.IsConnectedAndReadyになりました。PhotonNetwork.networkingPeerはPhotonNetwork.NetworkingClientになりました。PhotonNetwork.connectionStateDetailedはPhotonNetwork.NetworkClientStateになりました。PhotonNetwork.playerNameはPhotonNetwork.NickNameになりました。PhotonNetwork.roomはPhotonNetwork.CurrentRoomになりました。PhotonNetwork.lobbyはPhotonNetwork.CurrentLobbyになりました。PhotonNetwork.playerはPhotonNetwork.LocalPlayerになりました。PhotonNetwork.insideLobbyはPhotonNetwork.InLobbyになりました。PhotonNetwork.otherPlayersはPhotonNetwork.PlayerListOthersになりました。PhotonNetwork.sendRateOnSerializeはPhotonNetwork.SerializationRateになりました。PhotonNetwork.versionPUNはPhotonNetwork.PunVersionになりました。PhotonTargetsenumはRpcTargetになりました。PhotonPlayerクラスはPhoton.Realtime.Playerになりました。PhotonPlayer.IDはPhoton.Realtime.Player.ActorNumberになりました。
コールバックの変更
コールバックについての詳細はこちらのページを参照してください。
IPunInstantiateMagicCallbackを除くすべてのコールバックインターフェースは登録され、また登録解除されなければなりません。
PhotonNetwork.AddCallbackTarget(this)とPhotonNetwork.RemoveCallbackTarget(this)を呼び出してください。 (それぞれOnEnable()とOnDisable()の中で)。
Photon.PunBehaviourをMonoBehaviourPunCallbacksと置き換えてください。
MonoBehaviourPunCallbacksのためにOnEnabled() と OnDisable()を上書きするときは、毎回ベースクラスのメソッドを呼び出してください。
PhotonNetwork.OnEventCallはなくなりました
2つのオプションがあります:- 代わりに
PhotonNetwork.NetworkingClient.EventReceived(EventData)を使用。 IOnEventCallback.OnEvent(EventData)を使用。
PUN2では、イベントコールバックのシグネチャが変更されましたが、
EventDataから必要なものを取得できます。
また、イベントコールバックは、カスタムイベント(カスタムイベントコード<200)だけでなく、すべてのイベントに対してトリガーされます。デフォルトでPUN Classicでの設定とは異なります。オンラインルームに参加しても、送信者/設定者クライアント(プロパティを設定したアクター)にプロパティの設定が反映されないようになっています。
代わりに、送信者/設定者のクライアント(プロパティを設定するアクター)はローカルで変更を適用/設定するためにサーバイベントPropertiesChangedを持つようになりました。
OnPlayerPropertiesUpdateまたはOnRoomPropertiesUpdateコールバックがローカルクライアントにトリガーされるまで待つ必要があります。
この新しい動作は、新しいルームオプションフラグroomOptions.BroadcastPropsChangeToAllの導入によるもので、デフォルトではtrueに設定されています。
理由は、先にローカルでプロパティを設定してからサーバー上やルームの他のアクターに対して設定するリクエストを送信すると、プロパティが正常に同期されない可能性があるからです。
後者は失敗する可能性があり、送信者/設定者クライアント(プロパティを設定するアクター)のプロパティが、サーバ上や他のクライアント上のものとは異なるものになってしまうかもしれません。
以前のような動作(サーバーにリクエストを送る前にローカルでプロパティを設定して同期させる)をさせるには、ルームを作成する前にroomOptions.BroadcastPropsChangeToAllをfalseに設定します。
しかし、これはお勧めできません。PUN2は、
OnRoomPropertiesUpdatedやOnPlayerPropertiesUpdatedコールバックを、SetPropertiesの呼び出しで変更しない限り、トリガーしません。
PUN2では、ルームに入る際(ルームを作成、参加、再入室した後)、OnPlayerPropertiesUpdateやOnRoomPropertiesUpdateコールバックは初期化されたプロパティに対してはトリガーされません。
初期値にアクセスするには、PhotonNetwork.CurrentRoom.CustomProperties(またはPhotonNetwork.CurrentRoomの他のクラスプロパティ、IsOpen、IsVisible、MaxPlayersなど)または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>) |
| - | IOnEventCallback | OnEvent(EventData) |
| OnPhotonInstantiate | IPunInstantiateMagicCallback | OnPhotonInstantiate |
| OnPhotonSerializeView | IPunObservable | OnPhotonSerializeView |
| OnOwnershipRequest(object[]) | IPunOwnershipCallbacks | OnOwnershipRequest(PhotonView, Player) |
| OnOwnershipTransfered(object[]) | IPunOwnershipCallbacks | OnOwnershipTransfered(PhotonView, Player) |
| OnWebRpcResponse | IWebRpcCallback | OnWebRpcResponse |