ジェイのブログ

Unity,UnrealEngine,ゲーム制作,プログラミング,日記も書きます!

【PhotonPUN2】1スクリプトでロビー作成、入室、選択ができる方法

 以下のソースを空のスクリプトに貼るだけで実装できます。

```C#
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
using UnityEngine.SceneManagement;

public class CTitleManager : MonoBehaviourPunCallbacks
{
    private string RoomName = "";
    Rect LobbyGuiRect = new Rect(0, 0, 300, 200);

    void Update()
    {
        LobbyGuiRect.x = Screen.width / 4;
        LobbyGuiRect.y = Screen.height / 4;
        LobbyGuiRect.width = Screen.width / 2;
        LobbyGuiRect.height = Screen.height / 4;
    }
    // 接続したらロビーに入室する
    public override void OnConnectedToMaster()
    {
        PhotonNetwork.JoinLobby();
    }
    //GetRoomListは一定時間ごとに更新され、その更新のタイミングで実行する処理
    //ルームリストに更新があった時(ロビーに入ってるときのみ呼ばれる)
    public override void OnRoomListUpdate(List<RoomInfo> roomList)
    {
        RoomList = roomList;
    }
    List<RoomInfo> RoomList = new List<RoomInfo>();
  void RoomNameUIWindow(int window_id) { // ルーム名の入力 GUILayout.BeginHorizontal(); GUILayout.Label("RoomName : "); RoomName = GUILayout.TextField(RoomName, GUILayout.Width(200)); GUILayout.EndHorizontal(); // ルームを作成して入室する if (GUILayout.Button("Create Room", GUILayout.Width(150))) { PhotonNetwork.CreateRoom(RoomName); } // ルーム一覧を検索 foreach (var room in RoomList) { // ルームパラメータの可視化 string room_param = $"{room.Name}{room.PlayerCount}/{((room.MaxPlayers == 0) ? "-" : room.MaxPlayers.ToString())}"; // ルームを選択して入室する if (GUILayout.Button("Enter Room : " + room_param)) { PhotonNetwork.JoinRoom(room.Name); } } } void PlayerNameUIWindow(int window_id) { // プレイヤー名の入力 GUILayout.BeginHorizontal(); GUILayout.Label("PlayerName : "); PhotonNetwork.NickName = GUILayout.TextField( (PhotonNetwork.NickName == null) ? "" : PhotonNetwork.NickName, GUILayout.Width(200)); GUILayout.EndHorizontal(); // MUNサーバに接続する if (GUILayout.Button("Connect Server", GUILayout.Width(150))) { PhotonNetwork.AutomaticallySyncScene = true; PhotonNetwork.ConnectUsingSettings(); } } public override void OnCreatedRoom() { SceneManager.LoadScene("ThirdPersonTest"); } void OnGUI() { // サーバに接続している場合 if (PhotonNetwork.IsConnected) { // ロビーに入室してる場合 if (PhotonNetwork.InLobby) { // ルームに入室していない場合 if (!PhotonNetwork.InRoom) { GUILayout.Window(1, LobbyGuiRect, RoomNameUIWindow, ""); } } else // ロビーに入室してない場合 { // ルームに入室している場合 if (PhotonNetwork.InRoom) { } } } // PUNサーバに接続していない場合 else { GUILayout.Window(2, LobbyGuiRect, PlayerNameUIWindow, ""); } } } ```