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 anything
Photon 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
になりました。PhotonTargets
enumは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 |