トップ 一覧 検索 ヘルプ RSS ログイン

unity_photon_cloud_room_create_joinの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
[[Player一覧を取得|unity_photon_cloud_player_list]] > [[キャラクタの同期|unity_photon_cloud_char]]
[[Player一覧を取得|unity_photon_cloud_player_list]] > [[キャラクタの同期(Demoのmonsterprefab)|unity_photon_cloud_char]]
----
!!![Photon Cloud] Roomの作成または参加

!!アプリで1つのRoomを手軽に確保/参加

OnJoinedLobby関数内で
 PhotonNetwork.JoinRandomRoom();
を呼ぶと、
すでにRoomが存在する場合は、既存のRoomに参加します。

処理に失敗した場合は「OnPhotonRandomJoinFailed」関数が呼ばれます。まだRoomが1つも作成されていない場合は処理に失敗することになります。
はじめの1回目はRoom自身存在しませんので、このOnPhotonRandomJoinFailed関数が呼ばれた中で
 PhotonNetwork.CreateRoom("Room名");
を呼んで、Roomを作成するとよいでしょう。
Roomへの参加に成功した場合は「OnJoinedRoom」関数が呼ばれます。
アプリ内で1つのRoomしか必要ない場合は、PhotonNetwork.JoinRandomRoomを使うのが楽ではあります。

!!既存のRoomが存在するか判定し、参加

「[[Room一覧を取得|unity_photon_cloud_room_list]]」のように、OnReceivedRoomListUpdate関数でPhotonNetwork.GetRoomList()を呼ぶと、もし既存のRoomが存在する場合はそれを列挙できます。
ここで取得したRoom名を使用し、
 PhotonNetwork.JoinRoom("Room名");
とすることで、第一引数で指定したRoomに参加します。
Roomへの参加に成功した場合は「OnJoinedRoom」関数が呼ばれます。

!!新しいRoomを作成し、参加
既存のRoomで目当てのがない場合は、
 PhotonNetwork.CreateRoom("Room名"); 
とすることで新たにRoomを生成し、そこに参加します。
処理に失敗した場合は「OnPhotonCreateRoomFailed」関数が呼ばれます。
Roomへの参加に成功した場合は「OnJoinedRoom」関数が呼ばれます。

!!PhotonNetwork.JoinRoomとPhotonNetwork.CreateRoomを使ったRoomへの参加の例

サンプルのRandomMatchmaker.csを改造して、
Roomが存在しない場合は「PhotonNetwork.CreateRoom」を呼んでRoomを作成/参加、
Roomが存在する場合は「PhotonNetwork.JoinRoom」を呼んで既存Roomに参加する例です。

 using UnityEngine;
 
 public class RandomMatchmaker2 : Photon.MonoBehaviour {
     private string m_currentRoomName = "";      // 参加しているRoom名.
 
     // Use this for initialization
     void Start() {
         PhotonNetwork.ConnectUsingSettings("0.1");
     }
 
     /**
      * Lobbyに入ったときに呼ばれる.
      */
     void OnJoinedLobby() {
         Debug.Log("OnJoinedLobby");
     }
 
     /**
      * Lobbyから去ったときに呼ばれる.
      */
     void OnLeftLobby() {
         Debug.Log("OnLeftLobby");
     }
 
     /**
      * 指定のroomNameのRoomに参加する.
      * roomNameが""の場合は、新しいRoomを生成して参加.
      */
     private void m_JoinRoom(string roomName) {
         if (string.IsNullOrEmpty(roomName)) PhotonNetwork.CreateRoom("room1");      // room1というRoomを生成/参加.
         else PhotonNetwork.JoinRoom(roomName);                                       // roomNameで示されたRoomに参加.
     }
 
     /**
      * Roomのリストを取得.
      */
     void OnReceivedRoomListUpdate() {
         Debug.Log("OnReceivedRoomListUpdate");
         m_GetRoomList();
     }
 
     /**
      * Roomリストを取得.
      */
     private void m_GetRoomList() {
         RoomInfo [] roomInfo = PhotonNetwork.GetRoomList();
         if (roomInfo == null || roomInfo.Length == 0) return;
         m_currentRoomName = roomInfo[0].name;       // Room名を取得.
         for (int i = 0; i < roomInfo.Length; i++) {
             Debug.Log((i).ToString() + " : " + roomInfo[i].name);
         }
     }
 
     void OnPhotonCreateRoomFailed() {
         Debug.Log("OnPhotonCreateRoomFailed !");
     }
 
     void OnJoinedRoom() {
         Debug.Log("OnJoinedRoom");
 
         m_currentRoomName = PhotonNetwork.room.name;    // 現在参加しているRoom名を取得.
 
         GameObject monster = PhotonNetwork.Instantiate("monsterprefab", Vector3.zero, Quaternion.identity, 0);
         monster.GetComponent<myThirdPersonController>().isControllable = true;
     }
 
     void OnGUI() {
         if (GUILayout.Button(" Join Room ")) {      // プッシュするとRoomに参加する.
             m_JoinRoom(m_currentRoomName);
         }
         GUILayout.Label("State : " + PhotonNetwork.connectionStateDetailed.ToString());
         GUILayout.Label("Current Room : " + m_currentRoomName);
     }
 }

実行すると、
 OnJoinedLobby            <== Lobbyに入った
 OnReceivedRoomListUpdate <== 既存のRoomを列挙
 
 ※ ここで「Join Room」ボタンを押した。
    PhotonNetwork.CreateRoomまたはPhotonNetwork.JoinRoomを呼ぶ。
 
 OnLeftLobby    <== Lobbyから去る
 OnJoinedRoom   <== Roomへの参加に成功

の順に呼ばれます。
----
[[Player一覧を取得|unity_photon_cloud_player_list]] > [[キャラクタの同期|unity_photon_cloud_char]]
[[Player一覧を取得|unity_photon_cloud_player_list]] > [[キャラクタの同期(Demoのmonsterprefab)|unity_photon_cloud_char]]
----
{{lastmodified}}