トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

unity_photon_cloud_room_create_join

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秒