# HG changeset patch # User riono # Date 1644125921 -32400 # Node ID e33201b0018d31b9d541a63ce6af4cb1cd24efa1 # Parent 6a53740dd200f29b0c7f2b4eed898d50e35cf0ec update Unity chapter diff -r 6a53740dd200 -r e33201b0018d Paper/Makefile --- a/Paper/Makefile Sat Feb 05 17:00:13 2022 +0900 +++ b/Paper/Makefile Sun Feb 06 14:38:41 2022 +0900 @@ -29,7 +29,7 @@ $(BIBTEX) $(TARGET) -$(MAKEINDEX) $(TARGET) @echo "\t second..." - $(LATEX) $(TARGET) + $(LATEX) $(TARGET) > /dev/null open:$(TARGET).pdf diff -r 6a53740dd200 -r e33201b0018d Paper/chapter/4-WorkingInUnity.tex --- a/Paper/chapter/4-WorkingInUnity.tex Sat Feb 05 17:00:13 2022 +0900 +++ b/Paper/chapter/4-WorkingInUnity.tex Sun Feb 06 14:38:41 2022 +0900 @@ -118,7 +118,33 @@ 以上のテストにより、Chrisite Shrapの機能が問題なくUnity上でも機能することが確認できた。 \section{UnityでのChrisite Sharpの役割} +% GameObjectをDGにする +% GameObjectを継続にする +% 並列部分をChristieでやる +% 実装するには何が必要? どう言う考えが必要? UnityでCodeGearを動作させる場合、特にUnity APIを使用して処理を行う際は、MainThreadDispatcher.Postメソッドを利用してMain Threadに処理を以上する必要がある。 他方、UnityではUpdateメソッドやFixedUpdateメソッドなどUnityの実装に従って、フレーム単位や時間単位でのメソッド呼び出しが保証されている。 -CG内でMainThreadDispatcher.Postメソッドを使用しGameObjectの移動などのUnity APIを利用した処理を行うことで、処理が行われるタイミングが不安定になることが考えられる。 +CG内でMainThreadDispatcher.Postメソッドを使用しGameObjectの移動などのUnity APIを利用した処理を行うことで、処理が行われるタイミングが不安定になることがあると考えられる。 + +そこで、ネットワーク上で通信が必要なものだけをChrisite Sharpで通信を行い、受信データをMonoBehaviourを継承したクラスで処理・動作させるという方法を考えた。 +Unityには非同期処理としてCoroutineやTaskなどがあるが、シングルスレッドでの動作を前提として利用されている。 +この手法を取ることにより、Unity上の処理を行うタイミングが保証されると共に、 +並列処理やデータのやり取りをChristieに一任することができ、Multi Threadによる並列処理が可能となる。 + +またUnity上で操作、処理を行っているGameObject自体をDGに継続にする、直接的にはDGにすることによってより並列処理などを意識することなくゲーム開発が可能となる。 +GameObject自体をDGにすることにより、通信に必要なデータを送信するためのコードを書かずに待ち合わせが可能となる。 +また、待ち合わせを行っていることによりデータがNullのまま処理を開始することがなくなる。 +位置などの毎フレーム必要なデータや、画面の描画に必要なデータはPeekで取得を行うことで、通信が途中で途切れてしまった場合でもその直前のデータは参照可能であり、 +接続の復帰も行いやすいと考えられる。 + + + + + + + + + + + diff -r 6a53740dd200 -r e33201b0018d Paper/master_paper.pdf Binary file Paper/master_paper.pdf has changed