[[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().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]] > [[キャラクタの同期(Demoのmonsterprefab)|unity_photon_cloud_char]] ---- {{lastmodified}}