Player一覧を取得 > キャラクタの同期(Demoのmonsterprefab)
[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一覧を取得」のように、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一覧を取得 > キャラクタの同期(Demoのmonsterprefab)
最終更新時間:2014年04月28日 12時38分33秒