Mercurial > hg > Papers > 2022 > riono-master
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(_ => { | |
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 |