質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

0回答

475閲覧

unityでビルドしたアプリケーションでTransport Layer APIを用いた動作が正常に動きません

gemfighter

総合スコア38

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

0グッド

0クリップ

投稿2021/11/21 13:55

編集2021/11/28 12:46

最初に起動したアプリ(エディタかビルド)がサーバーになって、後から起動したアプリがクライアントになった後、クライアントから「InputField」に入力された文字の情報をサーバー側アプリに送信してサーバー側の左上の「MsgText」に表示されるアプリケーションを作るつもりだったのですが、現状エディタ側しか正常に動いておらず、エディタ側を後から起動してもエディタ側がサーバーと認識しているらしく、エディタ側に入力された文字情報はエディタ側の左上の「MsgText」に表示表示されます。
逆にビルド側は「InputField」に文字を入力して送信してもエディタ側もビルド側の「MsgText」は無反応です。
一応ビルドする時のシーンも確認しましたが、ちゃんと動かすシーンがセットされていました。
どうやったらビルド側のアプリケーションが正常に動くでしょうか?

この本に書いてあることをしました:Unity ネットワークゲーム 開発実践入門

こういう情報が欲しいという意見があれば随時追加していきます。

C#

1using System.Collections; 2using System.Collections.Generic; 3using System.IO; 4using UnityEngine; 5using UnityEngine.UI; 6using UnityEngine.Networking; 7 8public class TLScript : NetworkBehaviour 9{ 10 11 public Text text; 12 public InputField field; 13 14 public int maxConnection = 10; 15 private int hostId = 0; 16 public string serverAddress = "127.0.0.1"; 17 public int serverPort = 5000; 18 private int connectionId; 19 private int channelId = 1; 20 public int MaxBufferSize = 1000; 21 22 // Start is called before the first frame update 23 void Start() 24 { 25 //初期化 26 NetworkTransport.Init(); 27 //ネットワーク設定の作成 28 ConnectionConfig config = new ConnectionConfig(); 29 config.AddChannel(QosType.Reliable); 30 config.AddChannel(QosType.Unreliable); 31 //トポロジーの作成 32 HostTopology topology = new HostTopology(config, maxConnection); 33 Debug.Log("NetworkTransport init."); 34 35 //ホストの作成 36 for (int i = serverPort; i < serverPort + 10; i++) 37 { 38 hostId = NetworkTransport.AddHost(topology,i); 39 if(hostId != -1) 40 { 41 Debug.Log("AddHost:" + hostId + " port:" + i); 42 break; 43 } 44 } 45 46 //接続の開始 47 byte error; 48 connectionId = NetworkTransport.Connect(hostId, serverAddress, serverPort, 0, out error); 49 Debug.Log("Connected:" + connectionId); 50 } 51 52 //送信ボタンのコールバック 53 public void OnClickToServerButton() 54 { 55 byte[] data = System.Text.Encoding.ASCII.GetBytes(field.text); 56 SendData(data, QosType.Reliable); 57 } 58 59 //データの送信 60 public void SendData(byte[] data, QosType qos = QosType.Reliable) 61 { 62 byte error; 63 NetworkTransport.Send(hostId, connectionId, channelId, data, data.Length, out error); 64 65 Debug.Log("SendData: " + hostId + ":" + connectionId + ":" + channelId + " -> " + field.text); 66 } 67 68 // Update is called once per frame 69 void Update() 70 { 71 int outHostId; 72 int outConnectionId; 73 int outChannelId; 74 byte[] recBuffer = new byte[MaxBufferSize]; 75 int buffersize = MaxBufferSize; 76 int dataSize; 77 byte error; 78 79 //データ受信 80 NetworkEventType reciveEvent = NetworkTransport.Receive(out outHostId, out outConnectionId, out outChannelId, recBuffer, buffersize, out dataSize, out error); 81 82 //イベントごとの対応 83 switch (reciveEvent) 84 { 85 case NetworkEventType.ConnectEvent://接続開始 86 Debug.Log("Connect:" + outHostId + ":" + outConnectionId + ":" + outChannelId); 87 break; 88 case NetworkEventType.DisconnectEvent://接続終了 89 Debug.Log("Disconect:" + outHostId + ":" + outConnectionId + ":" + outChannelId); 90 break; 91 case NetworkEventType.DataEvent://データ受信 92 string message = System.Text.Encoding.ASCII.GetString(recBuffer); 93 Debug.Log("DataEvent:" + outHostId + ":" + outConnectionId + ":" + outChannelId +" -> " + message); 94 text.text = message; 95 break; 96 case NetworkEventType.Nothing://何もない 97 Debug.Log("Connect:" + outHostId + ":" + outConnectionId + ":" + outChannelId); 98 break; 99 } 100 } 101} 102

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.Networking; 5 6public class DiscoveryScript : NetworkDiscovery 7{ 8 private void Start() 9 { 10 if (isServer) 11 { 12 NetworkManager.singleton.StartHost(); 13 Debug.Log("StartHost"); 14 } 15 else 16 { 17 NetworkManager.singleton.StartClient(); 18 Debug.Log("StartClient"); 19 20 } 21 } 22 public void OnInitButton() 23 { 24 if (running) 25 { 26 StopBroadcast(); 27 } 28 Initialize(); 29 Debug.Log("Initialize."); 30 } 31 32 public void OnServerButton() 33 { 34 StartAsServer(); 35 Debug.Log("Start As Server."); 36 } 37 38 public void OnClientButton() 39 { 40 StartAsClient(); 41 Debug.Log("Start As Client."); 42 } 43 44 public override void OnReceivedBroadcast(string address, string msg) 45 { 46 Debug.Log("OnReceivedBroadcast address=[" + address + "] message=[" + msg + "]"); 47 } 48} 49

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.Networking; 5 6public class NetworkScript : NetworkBehaviour 7{ 8 public Canvas canvas; 9 public NetworkDiscovery discovery; 10 11 // Start is called before the first frame update 12 void Start() 13 { 14 15 } 16 17 // Update is called once per frame 18 void Update() 19 { 20 21 } 22 23 24 private void Awake() 25 { 26 Debug.Log("NetworkScript Start"); 27 discovery.Initialize(); 28 if (!discovery.StartAsServer()) 29 { 30 discovery.StartAsClient(); 31 Debug.Log("NetworkDiscovery StartAsClient"); 32 } 33 else 34 { 35 Debug.Log("NetworkDiscovery StartAsServer"); 36 } 37 38 } 39 public void OnHostButton() 40 { 41 canvas.gameObject.SetActive(false); 42 NetworkManager.singleton.StartHost(); 43 } 44 45 public void OnClientButton() 46 { 47 canvas.gameObject.SetActive(false); 48 NetworkClient client = NetworkManager.singleton.StartClient(); 49 50 Debug.Log(client.serverIp); 51 Debug.Log(client.serverPort); 52 Debug.Log(client.GetType()); 53 } 54 55 public void OnServerButton() 56 { 57 canvas.gameObject.SetActive(false); 58 NetworkManager.singleton.StartServer(); 59 } 60}

イメージ説明
イメージ説明
イメージ説明
イメージ説明

追記:現時点で新たに分かったことを書きます。
ビルドではTLScriptのStartとUpdateが動作しておらず、それ以外は動いてる事が分かりました。
でも何でその部分が動かないかは引き続き調査します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問