前回は UNET を使って、LAN外からアクセスできるオンラインゲームが作れることを確認しました。
HUDのボタン表示に頼らずにゲームを起動すると
PC側はサーバーとして、Android側はクライアントとして接続する作りにしたいと思います。
参考となる記事はこちら
tips.hecomi.com
サンプルプログラムまで書かれていました。
さすが凹みさんとこの記事ですね。
起動した環境が PCなのか Editor なのか、Android なのかで切り分けることにして
起動するとそれぞれサーバーとなる、クライアントとして接続するというコード書いてみます。
下記コードで起動するとサーバー開始、クライアント接続ができることを確認しました。
using UnityEngine; using System.Collections; using UnityEngine.Networking; using UnityEngine.Networking.Match; [RequireComponent(typeof(NetworkManager))] public class NetworkConnector : MonoBehaviour { public string MatchName = "UnetTest"; public string RoomPass = "B35Fwh3"; public uint MatchSize = 4U; private NetworkManager _manager; private NetworkMatch _match; // Use this for initialization void Start() { _manager = GetComponent<NetworkManager>(); _manager.StartMatchMaker(); _manager.matchName = MatchName; _manager.matchSize = MatchSize; _match = _manager.matchMaker; if (Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsEditor) { _match.CreateMatch(_manager.matchName, _manager.matchSize, true, RoomPass, _manager.OnMatchCreate); } else if (Application.platform == RuntimePlatform.Android) { _match.ListMatches(0, 20, MatchName, _manager.OnMatchList); StartCoroutine(JoinMatch()); } } private IEnumerator JoinMatch() { yield return new WaitForSeconds(3); var desc = _manager.matches[0]; // join first room _match.JoinMatch(desc.networkId, RoomPass, _manager.OnMatchJoined); yield return 0; } }
List してから Join するまで、時間を空けなければならないことに気を付けてください。
Join して良いタイミングがいつなのか、確認する方法までは調べていません。
すぐに問題になるので、確認できたら追記します。