umehoshiアプリとは これをインストールしたPCやスマフォを「UMEHOSHI ITA」とUSBケーブルで接続し、
「umehoshiEdit」で作成したプログラムを転送して「UMEHOSHI ITA」をコントロールする時に使います。

Unityで作成したUmehoshiアプリの内部プログラミングに関する資料

この資料は暫定的で内部の技術的メモです。(ソースは公開していないので、一般には意味がない資料です。)
この作品は、一方のServerSceneの残したまま別のClientSceneをロードする特殊な作りです。
LoadSceneMode.Additive のLoadSceneParametersを指定する使い方です。(Scene間の情報共有のため)
TCPサーバーとし使う場合は、ServerSceneだけ存在し、メニューからクライアントし切り替えて使う場合は、ClientSceneが重なるように 配置されます。

ServerSceneでは、「UMEHOSHI ITA」にコマンドを送信するボタンを任意数配置できます。
(USBで「UMEHOSHI ITA」していれば、このボタン操作で、「UMEHOSHI ITA」に命令を送り操作できます。)
送信情報はFileDatas.csで管理され、この情報とボタンをを管理するのがMy_Button_CMDプレファブです。

別途のクライアントとして起動したUmehoshiアプリとTCP接続状態において、受信した命令を「UMEHOSHI ITA」に命令を送り操作できます。

ソースファイル構成

ソースファイル定義概要アタッチなどの情報
Main.cs MainEnum列挙クラスと staticメソッドだけのMainクラスを定義。 "config.txt"のファイルに情報を保存し、起動時に取り出す目的 無し
FileDatas.cs FileDataクラス定義:「UMEHOSHI ITA」を操作する時に使う1つのファイルを管理し、 この集合を管理するstaticのDictionaryを持つ。 無し
ServerTcp.cs ServerTcpクラス定義。これが作品のメイン的なクラス Canvasにアタッチ
My_USB.cs UubStae列挙クラスとMy_USBクラス USBの接続と送受信に対する Canvasにアタッチ
Panel_SelectFile.cs SelectModeの操作用列挙クラスと Panel_SelectFileクラス定義 [UMEHOSHI ITA]に送るボタンの編集や実行のモード指定
(Panel_SelectFileは内部に、Dropdown_op,ToggleGroup,ScrollWiew_FilesのGameObjectを持つ)
Panel_SelectFileにアタッチ
ScrollView_Files.cs ScrollView_Filesクラスの定義 ボタンのScrollViewで[My_Button_CMD]のリストなどを管理
所定のディレクトリ内の全てコマンド用ファイル情報を取り込んで、FileData.dicに記憶して、"My_Button_CMD"などの必要なプレファブを用意するSetFilesメソッドが定義されます。
ScrollView_Filesにアタッチ
My_Button_CMD.cs My_Button_CMDプレファブ内のBUttonにアタッチ用に定義しておます。ここで「UMEHOSHI ITA」操作用ボタンの 編集用に移動処理などのメソッドがある。
また、FileDataオブジェクトの相互参照ができる。 (UMEHOSHI ITAへの送信命令のクリックイベントPointerUpメソッドを持つ。)
プレファブ内のボタンは、RectTransformの設定で画面の下からの座標にしている。
My_Button_CMDのプレファブにアタッチ
ClientTcp.cs ServerSceneを残したままロードして 接続相手側のにServerSceneのServer.csと通信する機能を定義しています。
また、指定Webページ内にある[UMEHOSHI ITA]用のコード(id="UMH〜")を取り込む機能の GetHtmlData()関数を定義している。
で webページからのボタン情報取得してボタンを生成する。
ClientSceneのCanvas_Cにアタッチ
Comm.cs 通信状態を色で示す場合のMyColorクラス、 通信ストリーム制御用のstaticメソッドを持つStreamRWクラスを定義 ClientTcp.cs、ServerTcpで利用
QueueBuffer.cs 連続したメッセージ受信スレッドで蓄えて、Updeteで取り出せる。(UMEHOSHI ITAの受信表示で利用) ClientTcp.csで利用
MyWebCamera.cs カメラ表示制御用 RawImageとWebCamTextureを制御 EventSystem にアタッチ
My_Sound.cs サウンド管理(My_SoundとSoundBuffクラスを定義) Canvasにアタッチ

起動手続きの概要

● [ServerScene]から起動する。 このCanvasにアタッチされる「ServerTcpクラス」のStartメソッドと、「USBクラス」のStartメソッドが最初の起動である。
このどちらかのStart内で実行される「Main.Restore();」で前回実行時の情報取得が取得され、ベンダーIDやIPアドレスなどが初期化される。

● [ServerScene]の「Panel_SelectFile」のパネルにアタッチしている「Panel_SelectFile.cs」の Start()メソッド内で、"ScrollView_Files"のGameObjectを「this.scrollView_Files_Obj」に取得ししています。
そして、「this.scrollView_Files_Obj.SetFiles(Panel_SelectFile.change_now_value)メソッド」で
 所定のディレクトリ(Windowsであれば、「C:/Users/yuu.PC7/AppData/LocalLow/SHIEN_LAB/umehoshi/CMDFILES1」)内の  「ueme_dir.txt」(可視状態の)の情報を読み取り、ボタンの情報を読み込んで、初期表示をしています。
 また、このディレクトリ内で"*.umh"のファイルがサーチされFileDataクラスのdicに管理される。
 この「this.scrollView_Files_Obj.SetFilesメソッド」の呼び出しは、Panl_SelectFiles.cs内のドロップダウンリスト変更でも行われ、
 その中でファイルをサーチして、FileDataクラスのdicの更新とボタン配置の更新を行う。

TCPサーバーとし使う場合に、受信したコマンドファイル[〜.umh]に対応する操作ボタンの配置に関して

上記で示した通りに「this.scrollView_Files_Obj.SetFilesメソッド」で、  所定のディレクトリ内の「ueme_dir.txt」には、可視状態のボタンのファイル「〜.umh」ファイル名が並んでいます。
このファイルの各行の繰り返しでファイル名からScrollView_Files.setItemメソッドで生成して、fileDataに記憶します。
また、"My_Button_CMD"プレファブを生成して、fileData.SetCmdButton(myButtonCmd);で表示や位置情報を後進しています。

ScrollView_Files.setItemメソッド内で、FileData.getFileDataWithCreatingメソッドで未生成の場合にFileDataを生成してfileDataに記憶ます。
また、setItemメソッド内では、fileData.loadメソッドで、「〜.umh」をロードします。

なお、「〜.umh」の受信直後のボタン初期配置は、ClientTcp.cs 内 GetHtmlDataメソッドの中で行われ、20220801_のプロジェクトでyの設定を少し変更した。