順番が逆になったけど、通常のクライアントサーバーとして接続テストしてみた。
これまでのテストは機能が多すぎ(複雑すぎ)て原因がわかりにくい。
今回はドシンプルにサーバーを立ち上げて、接続するだけにする。
ついでにOnGUIの練習。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
using UnityEngine; using UnityEngine.UI; public class ServerClient : MonoBehaviour { string ip,ipsrv;//自IP、サーバIP(入力用) int port; bool uNat; public void Start(){ ip = Network.player.ipAddress; ipsrv = ip; port = 7777; uNat = !Network.HavePublicAddress(); } Rect r1 = new Rect(100, 100, 300, 100), r2 = new Rect(100, 200, 300, 100); void OnGUI(){ GUIStyle bs = new GUIStyle(GUI.skin.button); bs.fontSize = 30; GUIStyle ls = new GUIStyle(GUI.skin.label); ls.fontSize = 30; GUIStyle ts = new GUIStyle(GUI.skin.textField); ts.fontSize = 40; GUI.Label (new Rect(10, 10, 500, 50), ip+":"+port+" - NAT:"+uNat ,ls);//IP表示 if (GUI.Button (new Rect(500, 10, 100, 50), "NAT",bs)) uNat = !uNat; if (Network.peerType == NetworkPeerType.Disconnected) { //非接続 ipsrv = GUI.TextField(new Rect(400, 100, 300, 100), ipsrv, ts); if (GUI.Button (r1, "Start Client",bs)) Network.Connect (ipsrv, port); if (GUI.Button (r2, "Start Server",bs)) Network.InitializeServer (10, port, uNat); } else { //接続時 if (Network.peerType == NetworkPeerType.Client) { GUI.Label (r1, "Client",ls); if (GUI.Button (r2, "Disconnect",bs))Network.Disconnect(250); } if (Network.peerType == NetworkPeerType.Server) { GUI.Label (r1, "Server -connect "+ Network.connections.Length,ls); if (GUI.Button(r2, "Disconnect",bs))Network.Disconnect(250); } } } public void OnConnectedToServer() { Debug.Log("OnConnectedToServer"); } public void OnServerInitialized() { Debug.Log("OnServerInitialized"); } } |
このスクリプトをどこかに張り付けて実行すると次のようなUIが作られる。
スマホ操作用に大きめに作ったので、スタンドアローンの起動だと小さくとも800×600は必要です。
Start Serverでサーバー起動:useNatオプションは上のNATボタンで変更可。
Start Clientで右のアドレスに接続を試みる。
スタンドアローンとエディタでテストしてみる。
PC内で完結してるのでIPは同じ。NATはどっちでも問題なく接続できた。
スマホ(wi-fi接続)でも確認してみる。
プライベートネットワーク内なら問題なく接続できた。(やっぱりNATプロパティ関係なし)。
WifiとSIM、またSIMとSIMはどうやっても通信できなかった。まあ予想通り。
ファイアウォールがあるからNATパンチスルーが必要とかそんな感じだと思います。
なんにせよ自分の力量では上手く解決できなさそうなので別ルートでいこう。