カードゲームの作り方を考えていきたいと思います。
カードを双方のプレイヤーに配りたいと思うのですが、そのためにはネットワーク対戦を実現する必要があります。
今回はその下準備をしたいと思います。
前回でカードをシャッフルするところまではできました。
対戦ゲームですので、当然ネットワークを利用して作るという事になりますが、そこで色々調べたところphoton networkという対戦ゲーム用のサービス/アセットがあり、それを利用することにします。
詳しくは下記リンクをご参照ください。
PUNを使ってネットワーク同期を行う -Vol.1-
まず、上記のリンクで説明がある通り、App IDを取得し、Photon Unity Networking Classic - FREEのアセットをダウンロードします。
インポートするとセットアップのウィンドウが立ち上がります。ここに取得したAppIDをコピペします。
インスペクター上でprefferedRegionにjpを選択。
セットアップは以上です。
次に部屋に入るためのスクリプトを用意します。NetworkManager.csを作成し、下記のFPSを作るためのチュートリアルを参考にして進めていきます。
空のオブジェクトにNetworkManager.csをアタッチし、下記のように付け加えます。textを使用するので、using UnityEngli.UIというのを追加する必要があるようです。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //text 使うので public class NetworkManager : MonoBehaviour { [SerializeField] Text connectionText; [SerializeField] Transform[] spawnPoints; GameObject player;
[serializeField]というのはインスペクター上で使用するけれども、publicにしないという意味だそうです。
spawnPointsはチュートリアル上ではプレイヤーの初期位置の取得に使うダミーのオブジェクトです。今回のカードゲームでは手札を配る初期位置として使う予定です。
下記をさらに、NetworkManager.csに付け加えます。部屋に入るために必要な情報です。
void Start() { PhotonNetwork.logLevel = PhotonLogLevel.Full;//情報を全部ください PhotonNetwork.ConnectUsingSettings("0.1"); } void Update() { connectionText.text = PhotonNetwork.connectionStateDetailed.ToString();//その情報をテキストに流します } void OnJoinedLobby() { RoomOptions ro = new RoomOptions() { isVisible = true, maxPlayers = 2 };//maxPlayerは人数の上限 PhotonNetwork.JoinOrCreateRoom("Tomo", ro, TypedLobby.Default);//""内は部屋の名前 }
ヒエラルキービューでテキストを作成し左下に位置を調整します。そして、インスペクター上でNetworkManagerのTextの項目にドラッグアンドドロップします。
これで、プログラムを走らせると、部屋に入れるはずですが、何故かconnected to Masterから先に進みません。
そこで調べてみると、”You need to check "Auto-Join Lobby" in the PhotonServerSettings.”ということで、セッティングをチェックしてみます。
Why am I stuck in ConnectedToMaster in Photon Free
AutoJoinLobbyのチェックボックスをオンにしたら、無事部屋に接続できました。左下にJOINEDという文字があるのが分かります。これで、部屋に接続することが出来たので、カードを配る準備ができました。
もしよろしければ、Photonについて私が知りえる限りの情報を徹底的にまとめてみたので、下記の記事も読んで下さいね!