ProcessingのAndroidModeで作成したモバイルアプリと、PC上で動かすUnityの間でデータの送受信をしたいと考えています。
Unityは1台のPC上で動かし、モバイルアプリをインストールした複数のアンドロイド端末がUnityとデータの送受信を行うといった形です。
Processing側ではKetaiライブラリを用いることで端末のIPアドレスが取得できたため、このIPアドレスを必要に応じて各端末がUnityへ送信し、Unityから特定の端末に対してデータを送信しようとしています。
Unity側で、C#を用いて(1)のようなプログラムを組みました。
(2)は、UnityOSC_masterの中にあるOSCHandler.csのInit()内部を少し書き換えたものです。
ListenToOSC()で何かしらのデータ(IPアドレス)を受け取ると同時にOSCHandler.Instance.Init()を呼び出し、引数にそのIPアドレスを渡して再び初期化することが狙いです。
しかし引数にIPアドレスを渡してOSCHandler.Instance.Init()を呼び出しても、通信に用いるIPアドレスが変化しません。
Start()の中で呼び出した1回目のOSCHandler.Instance.Init()で引き渡したIPアドレスがそのまま引き継がれているようです。
引数としてIPアドレスを渡して再びOSCHandlerのインスタンスを書き換えるにはどのようにすればよろしいでしょうか。
あるいはOSCHandler.Instance.Init()がプログラム中一度しか使えない場合、送受信する相手となる端末を変えるためにIPアドレスを変更するためにはどのようにするべきでしょうか。
初心者のため説明不足な点が多々あり、理解不足の点もあると思いますが、よろしくお願いします。
###発生している問題・エラーメッセージ
※エラー自体は発生しませんでした。 ※OSCHandler.Instance.Init()を呼び出した最初の1回目は正しく動作し、2回目以降は引数などに関わらずインスタンスが最初の値を保持したままとなっています。
###該当のソースコード
(1) public class test : MonoBehaviour{ // 誰にも該当しない適当なIPアドレスを初期値として代入 public string newIP = "192.168.00.00"; // 使用するポートの文字列 public string sendUserPort = ":10000"; // newIPとsendUserPortを連結させてデータ送信時に使用する public string sendUserComp = ""; private Dictionary<string, ServerLog> servers; void Start(){ OSCHandler.Instance.Init(newIP); server = new Dictionary<string, ServerLog>(); } void Update(){ // sendUserCompは、「受信したIPアドレス:10000」という文字列 sendUserComp = string.Concat(newIP, sendUserPort); if(センサーが反応したら){ OSCHandler.Instance.SendMessageToClient ("targetAndroid", sendUserComp, 送るデータ); } } void ListenToOSC(){ foreach(KeyValuePair<string, ServerLog> item in servers){ if(item.Value.log.Count>0){ newIP = item.Value.packets [lastPacketIndex].Data [0].ToString (); // 端末からIPアドレスを受信するたびにOSCHandler.Instance.Init()を呼び出して再設定したいが・・・ OSCHandler.Instance.Init (newIP); servers = new Dictionary<string, ServerLog>(); } } (2) // UnityOSCのOSCHandler.csのInit関数部分のみ変更 : : public void Init(string newIP){ //端末から送られてきたIPアドレスを引数として受け取ってここを書き換えたい CreateClient("targetAndroid", IPAddress.Parse(newIP), 10000); //受信用 CreateServer("someAndroid", 10001); } : :
###試したこと
・(1)の中の public string newIP = 192.168.00.00 の部分を、送受信したい端末のIPアドレスに書き換えると正しく動作します。このことから、Init()を最初に呼び出したときは正しく動作していると考えています。
###補足情報(言語/FW/ツール等のバージョンなど)
・参考にしたのは以下のサイトです。
NEAREAL様
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。