comparison Slide/master-slide.html @ 57:309de2ffb2bd

update
author riono <e165729@ie.u-ryukyu.ac.jp>
date Mon, 14 Feb 2022 20:57:33 +0900
parents 01087d212c1a
children c269b11bb810
comparison
equal deleted inserted replaced
56:01087d212c1a 57:309de2ffb2bd
427 <li>リポジトリをネスト化して対応</li> 427 <li>リポジトリをネスト化して対応</li>
428 </ul> 428 </ul>
429 </li> 429 </li>
430 </ul> 430 </ul>
431 431
432
433
434 </div>
435
436 <div class='slide'>
437 <!-- _S9SLIDE_ -->
438
439
432 <h3 id="書き換えの方針">書き換えの方針</h3> 440 <h3 id="書き換えの方針">書き換えの方針</h3>
433 <ul> 441 <ul>
434 <li>C#で記述するChristieをChristie Sharpとする</li> 442 <li>C#で記述するChristieをChristie Sharpとする</li>
435 <li>Christie設計時の意図や、互換性を保つためChristieと同じ動作をさせる</li> 443 <li>Christie設計時の意図や、互換性を保つためChristieと同じ動作をさせる</li>
436 <li>ChristieはJava9から開発されており、非推奨なコードやが含まれている</li> 444 <li>ChristieはJava9から開発されており、非推奨なコードやが含まれている</li>
439 <li>MessagePackのバージョンアップ</li> 447 <li>MessagePackのバージョンアップ</li>
440 <li>ThreadPoolからTaskへ変更</li> 448 <li>ThreadPoolからTaskへ変更</li>
441 </ul> 449 </ul>
442 </li> 450 </li>
443 </ul> 451 </ul>
452
453
454
455 </div>
456
457 <div class='slide'>
458 <!-- _S9SLIDE_ -->
459
444 460
445 <h3 id="java-からの変更点">Java からの変更点</h3> 461 <h3 id="java-からの変更点">Java からの変更点</h3>
446 <ul> 462 <ul>
447 <li>Java とC# は基本的に書き方は変わらない</li> 463 <li>Java とC# は基本的に書き方は変わらない</li>
448 </ul> 464 </ul>
752 <div class='slide'> 768 <div class='slide'>
753 <!-- _S9SLIDE_ --> 769 <!-- _S9SLIDE_ -->
754 770
755 771
756 <h3 id="christie--on-unityのコード例">Christie # on Unityのコード例</h3> 772 <h3 id="christie--on-unityのコード例">Christie # on Unityのコード例</h3>
757 <pre><code class="language-cs:UnityStartHelloWorld.cs">public class StartHelloWorld : StartCodeGear { 773 <pre><code class="language-cs:TransformMoveTest.cs">public class TransformMoveTest : MonoBehaviour {
758 774 private CodeGearManager cgm;
759 public StartHelloWorld(CodeGearManager cgm) : base(cgm) { } 775 public Transform otherTransform;
760 776 private Vector3 pos;
761 public void RunCodeGear(CodeGearManager cgm) { 777
762 cgm.Setup(new HelloWorldCodeGear());
763 cgm.Setup(new FinishHelloWorld());
764 cgm.GetLocalDGM().Put("helloWorld", "hello");
765 cgm.GetLocalDGM().Put("helloWorld", "world");
766 }
767 }
768 </code></pre>
769
770 <pre><code class="language-cs:UnityHelloWorld.cs">public class HelloWorld : MonoBehaviour {
771 void Start() { 778 void Start() {
772 CodeGearManager cgm = StartCodeGear.CreateCgm(10000); 779 cgm = StartCodeGear.CreateCgm(10000);
773 var helloWorld = new StartHelloWorld(cgm); 780 cgm.Setup(new PositionAssignCodeGear());
774 helloWorld.RunCodeGear(cgm); 781 cgm.GetLocalDGM().Put("transform", transform);
775 } 782 }
776 } 783
777 </code></pre> 784 public void Update() {
778 <ul> 785 pos = otherTransform.position;
779 <li>HelloWorldCodeGearと、FinishHelloWorld はそのまま使用</li> 786 Vector3 newPos = new Vector3(pos.x + 3, pos.y, pos.z + 3);
780 <li>StartHelloWorld をUnity で使用できるように書き換え 787 cgm.GetLocalDGM().Put("pos", newPos);
781 <ul> 788 }
782 <li>Unity ではMonoBehaviour 継承したクラスが動作可能</li> 789
783 <li>ゲーム開始時に1度だけ呼ばれるStart 関数</li> 790 private void LateUpdate() {
784 <li>Start 関数でCGM のインスタンスを生成</li> 791 cgm.Setup(new PositionAssignCodeGear());
785 <li>Main 関数を名前を変えたRunCodeGear 関数を実行</li> 792 }
786 </ul> 793 }
787 </li> 794
788 </ul> 795 </code></pre>
796
797 <pre><code class="language-cs:PositionAssingCodeGear.cs">public class PositionAssignCodeGear : CodeGear {
798 [Take] private Vector3 pos;
799 [Peek] private Transform transform;
800
801 public override void Run(CodeGearManager cgm) {
802 MainThreadDispatcher.Post(_ =&gt; {
803 transform.position = pos;
804 }, null);
805 }
806 }
807
808 </code></pre>
789 809
790 810
791 811
792 </div> 812 </div>
793 813
794 <div class='slide'> 814 <div class='slide'>
795 <!-- _S9SLIDE_ --> 815 <!-- _S9SLIDE_ -->
796 816
797 817
798 <h3 id="unityで使用されているライブラリとの比較">Unityで使用されているライブラリとの比較</h3> 818 <h3 id="unityで使用されているライブラリとの比較">Unityで使用されているライブラリとの比較</h3>
799 <p>Unityで使用されている既存のライブラリとして、Photon Unity Networking 2(PUN2)、MLAPIと、Christie # の比較を行う。</p> 819 <p>Unityで使用されている既存のライブラリとして、Photon Unity Networking 2(PUN2)、Mirrorと、Christie # の比較を行う。</p>
800 820
801 <table> 821 <table>
802 <thead> 822 <thead>
803 <tr> 823 <tr>
804 <th> </th> 824 <th> </th>
805 <th>Christie #</th> 825 <th>Christie #</th>
806 <th>PUN2</th> 826 <th>PUN2</th>
807 <th>MLAPI</th> 827 <th>Mirror</th>
808 </tr> 828 </tr>
809 </thead> 829 </thead>
810 <tbody> 830 <tbody>
811 <tr> 831 <tr>
812 <td>通信方式</td> 832 <td>通信方式</td>
835 855
836 <div class='slide'> 856 <div class='slide'>
837 <!-- _S9SLIDE_ --> 857 <!-- _S9SLIDE_ -->
838 858
839 859
840 <!-- 860 <h3 id="christie-sharpの利点">Christie Sharpの利点</h3>
841 ### チート対策について 861 <ul>
842 * オンラインゲームにおいてチート対策は必須 862 <li>単体でも並列処理が可能
843 * 通常のオンラインゲームでのチート対策 863 <ul>
844 * クライアントをモニタリングする 864 <li>CodeGear/DataGearを利用した待ち合わせ処理</li>
845 * ダメージ計算などは全てサーバで行う 865 <li>CodeGearの処理はTaskによってThreadPoolで行われる</li>
846 * ユーザからの通報 866 <li>外部のライブラリを使用しなくてもUnityで強力な並列処理が可能</li>
847 867 </ul>
848 * Christie では型があるDataGear をkey と合わせてDGMに格納する方式を取っている 868 </li>
849 * 他のノードとの通信にはDGM のporxy に書き込むことで可能 869 <li>通信が切断した際にゲームロジックが停止しない
850 * DGM の構成にはTopology Manager が自動的に構成する 870 <ul>
851 * Topology Manager を使用することでクライアントは接続先を直接知る必要がない 871 <li>通信先の参照データをPeekで取得する</li>
852 * IP address などチートに使用される情報をプログラムに含めることなく通信可能 872 <li>DGMでproxyとしてデータはやりとりされているため、データは更新されないが参照は可能</li>
853 873 <li>TopologyManagerにCookieの機能があるため、改良すれば切断から復帰可能であると考える</li>
854 <center><img src="https://i.imgur.com/L8GVFdL.png" alt="message" width="450" height="260"></center>
855 <center>label を使用したデータ通信</center>
856
857 -->
858
859 <h3 id="実装の現状">実装の現状</h3>
860 <ul>
861 <li>Local DGMを使用してUnity 上でデータ通信を行うことができている</li>
862 <li>Scketo とMessagePack を用いた通信に関しては、書き換え途中
863 <ul>
864 <li>独自クラスをMessagePack でserialize できない</li>
865 </ul>
866 </li>
867 <li>今後の予定
868 <ul>
869 <li>Christie で実装されている例題</li>
870 <li>Alice からChristie に書き換えた際に取り除かれた機能の洗い出しを行う</li>
871 <li>Unity でChristie #の検証として100人規模のFPS の作成</li>
872 </ul> 874 </ul>
873 </li> 875 </li>
874 </ul> 876 </ul>
875 877
876 878
882 884
883 885
884 <h3 id="まとめ">まとめ</h3> 886 <h3 id="まとめ">まとめ</h3>
885 <ul> 887 <ul>
886 <li>Christie をUnity で使用するためにC# に書き換えを行った</li> 888 <li>Christie をUnity で使用するためにC# に書き換えを行った</li>
887 <li>書き換え方針としては、attribute やMessagePack などC# 独自の機能に対応しつつ元のソースコードと同一になるようにした</li> 889 <li>書き換え方針としては、attribute やMessagePack などC# 独自の機能に対応しつつ元のソースコードと同じ機能になるようにした</li>
888 <li>実装としては、localDataGearManager を用いた同一プロセスで複数インスタンス立ち上げによる通信が可能</li> 890 <li>Unityで動作検証を行い、正しく動作することを確認した</li>
889 <li>Remote DataGearManager を使用した複数台の通信については書き換え途中であり、引き続き行っていく</li> 891 <li>Unity既存のライブラリとの比較を行った</li>
890 <li>Christie の検証のためUnity で100人規模のFPS を作成する</li> 892 </ul>
893
894 <h3 id="今後の課題">今後の課題</h3>
895 <ul>
896 <li>TopologyManagerの完成
897 <ul>
898 <li>2nd keyを用いたTreeMapの通信</li>
899 </ul>
900 </li>
901 <li>Christie の性能検証を行う</li>
891 </ul> 902 </ul>
892 903
893 904
894 </div> 905 </div>
895 906