LoginSignup
31
27

More than 3 years have passed since last update.

Unityでマルチプレイしてみよう(photon) ルーム一覧作っただけ・・・

Last updated at Posted at 2016-06-08

とりあえず下準備

Photon Unity Networking Freeをインポート

photonのサイトでユーザー登録をして、
アプリケーションIDをとってきます。
無料だと20人同時アクセスまで。
photon1.png

アプリケーションIDをコピーして
Unity上からwindow->photon Unity Networking->PUN Wizardを開く
スクリーンショット 2016-06-08 13.43.08.png

AppId or Emailの所に貼り付けてSetUp Project
Done!とでれば完了

これでインポートしてきたやつのデモは動くよ。
一人じゃ意味ないからSceneを全部BuildSettingに突っ込んで
DemoHubがメニューなのでそれを一番上にしてビルド。

スクリーンショット 2016-06-08 14.07.27.png

はい、これUnity上のとビルドしたやつ起動して一人二役完成!
スクリーンショット 2016-06-08 14.08.55.png
これはDemo Wokerのシーン。これはルームの作成の機能も入っているし、チャットも出来るよ。
スクリーンショット 2016-06-08 14.10.42.png

PUN APIリファレンス(Ver.1.60)
Photon Turnbasedってないなと思ってなら終わってたのか・・・。
じゃぁリアルタイムだけでいいや。
Photon Turnbased 新規受注受付終了のご案内

とりあえずログインの仕方を・・・

うーんっと、まず最初に必要なのが、アプリケーションのバージョン番号の記載が必要。

PhotonNetwork.ConnectUsingSettings("バージョン番号");
//Roomに参加
PhotonNetwork.JoinRoom(roomName);

//Roomを作成
PhotonNetwork.CreateRoom(roomName);
//既に存在する場合は失敗し、これをコール:: OnPhotonCreateGameFailed
//CreateRoomの引数RoomOptionsでルームの人数を設定したりできる

//ランダムにどのRoomにでも参加する
PhotonNetwork.JoinRandomRoom();
//マッチするゲームが無い場合、失敗、そしてこれをコール:: OnPhotonRandomJoinFailed

パスワード付きの部屋を作りたい場合はこちらを参考にすればできる。なるほど!
招待者のみルームへ入室を許可する方法

ルームの一覧表示

foreach (RoomInfo room in PhotonNetwork.GetRoomList())
{
    Debug.Log(room.name);  //部屋名
    Debug.Log(room.playerCount);    //部屋の入場人数
    Debug.Log(room.maxPlayers);  //最大人数
}

お部屋作ってみよう!

とりあえず部屋作ろうと思って、はまりました。
ランダムで入室や部屋作成は出来るのに、
部屋一覧がどうやっても取得できないという・・・・。
原因はPhotonServerSetingのAuto-Join Lobbyのチェック
これを入れないとロビー一覧取得できない

スクリーンショット-2016-06-08-23.58.35.png

ちょっと作りがちゃっちいけど、
とりあえず名前決めて部屋の作成、部屋への参加、ランダムな部屋に参加の実装をした

次に鍵付きの部屋も作ってみようと思ってるけどまだ未実装。
一部だけどソース

部屋をつくるところ

    public void CreateRoom(string roomName, int playerCount, string password)
    {
        string roomNameStr = roomName;
        if(!string.IsNullOrEmpty(password)) roomNameStr += "_" + password;
        PhotonNetwork.CreateRoom (
            roomNameStr,    // ユニークな部屋名
            new RoomOptions() {maxPlayers = playerCount},
            null);
    }

    public void OnPhotonCreateRoomFailed()
    {
        Debug.Log("OnPhotonCreateRoomFailed got called. This can happen if the room exists (even if not visible). Try another room name.");
    }

    public void OnPhotonRandomJoinFailed()
    {
        Debug.Log("OnPhotonRandomJoinFailed got called. Happens if no room is available (or all full or invisible or closed). JoinrRandom filter-options can limit available rooms.");
    }

    public void OnCreatedRoom()
    {
        PhotonNetwork.LoadLevel("Room");
    }

部屋の一覧表示しているところ

        if (PhotonNetwork.GetRoomList().Length == 0)
        {
            Debug.LogWarning("部屋なし");
        }
        else
        {
            GameObject roomObj = null;
            foreach (RoomInfo room in PhotonNetwork.GetRoomList()) {

                roomObj = Instantiate(Resources.Load(CommonConst.ROOM_ITEM)) as GameObject;
                roomObj.transform.parent = scrollTran;
                roomObj.transform.localScale = Vector3.one;
                roomObj.GetComponent<RoomItem>().SetData(room);

        }

ランダムな部屋に入るところ


public void RandomEnter()
    {
        PhotonNetwork.JoinRandomRoom();
    }

    public void OnJoinedRoom()
    {
        Debug.Log("OnJoinedRoom");
        PhotonNetwork.LoadLevel("Room");
    }

    public void OnPhotonRandomJoinFailed()
    {
        Debug.Log("OnPhotonRandomJoinFailed got called. Happens if no room is available (or all full or invisible or closed). JoinrRandom filter-options can limit available rooms.");
    }

部屋に入るところ

    public void Join()
    {
        PhotonNetwork.JoinRoom(roomData.name);
    }

    // We have two options here: we either joined(by title, list or random) or created a room.
    public void OnJoinedRoom()
    {
        Application.LoadLevel("Room");
    }

    public void OnPhotonJoinRoomFailed(object[] cause)
    {
        Debug.Log("OnPhotonJoinRoomFailed got called. This can happen if the room is not existing or full or closed.");
    }

macのスタンドアローンでビルドしたやつでもターミナルからこんな感じで
open -n Test.app
作ったアプリの名前を叩けば複数起動できるから一人で賑やかに遊べるよ!

スクリーンショット 2016-06-09 00.34.45.png

ちなみに部屋に入ってから部屋を抜けるときは

  // これで部屋を抜けて
  PhotonNetwork.LeaveRoom();  
  // 抜けられたらこの関数がよばれるからここでシーンを切り替えるなりする
  public void OnLeftRoom()
  {
  }

疲れたので一旦ここまで。スマホで試す余力もなかったw
次は鍵付きのお部屋にカスタマイズしようかな

余談・・・

スマホでビルドしようとおもって、いつもお世話になっている
Fast Platform Switch
を使おうとしたら、販売中止になっておった・・・。
こういうことがあるからパッケージが消せない・・・。
Asset Store-5.xだけで44GBも使っている;w;容量がどんどん圧迫されていく・・・
なんとかならないかな・・・。

31
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
27