Mercurial > hg > Papers > 2022 > riono-master
changeset 40:d8a999b69da4
update Mirror chapter
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 09 Feb 2022 18:54:48 +0900 |
parents | 78fa97061c97 |
children | 6c9a28e13a7d |
files | Paper/chapter/2-RewriteCS.tex Paper/chapter/3-ChristieSharp.tex Paper/master_paper.pdf Paper/src/Library/MirrorExample.cs |
diffstat | 4 files changed, 17 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/chapter/2-RewriteCS.tex Wed Feb 09 04:00:56 2022 +0900 +++ b/Paper/chapter/2-RewriteCS.tex Wed Feb 09 18:54:48 2022 +0900 @@ -24,7 +24,7 @@ \begin{figure}[htb] \begin{center} - \includegraphics[width=130mm]{images/PUN2Connection.pdf} + \includegraphics[width=115mm]{images/PUN2Connection.pdf} \end{center} \caption{PUN2のServer接続} \label{fig:PUN2serverconnect} @@ -41,8 +41,6 @@ 各リージョンのMaster Serverは完全に分離しており、マッチメイキングはそれぞれのMaster Serverでのみ可能である。 Game Serverでは、Master Serverで作成された各ルームの管理が行われおり、実際にClient同士の通信を行ってゲームプレイを可能としているのはGame Serverである。 -\newpage - % 開発面でのできること アタッチするだけとか % 制限面 20mucみたいな 500messageとか % ネット環境がないとlocal通信すらできない @@ -75,6 +73,7 @@ これらの制限を超えて利用する場合には、別途料金や有料プランに加入する必要が発生する。 + \section{Mirror} MirrorはUnityで使用できるOSSのネットワークライブラリである。 PUN2と同様にPC間の同期を自動で行い、主にMMO規模のネットワークを想定して開発が行われている。 @@ -95,19 +94,27 @@ HostではServerと同時にLocal Clientが立ち上がる。 他のClinetはServerに接続を行うことで同期が可能となる。 ClinetはServerに対して操作やデータを送信し、Serverでの処理がClientに同期され反映される仕組みになっている。 -また、Mirrorでは公式Serverなどのサービスが用意されていないため、自前でServerを用意する必要がある。 +\newpage \lstinputlisting[label=src:MirrorExample, caption=Mirrorの使用例]{src/Library/MirrorExample.cs} ソースコード\ref{src:MirrorExample}はMirrorを使用して、プレイヤーを表示、操作する例である。 NetworkBehaviourはMonoBehaviorを継承して作成されており、ネットワーク上で動作させる処理に継承させる必要がある。 +OnStertServerメソッドはServerでこのGameObjectが生成された際に実行される。 +このような様々なcallbackがNetworkBehaviourには用意されている。 +また、フィールド変数にSyncVar attributeを付与することで自動的に変数を同期可能にしている。 +SyncVar attributeによってサポートされている型はC\#のプリミティブ型やstring、Unity APIから提供されているVector3やQuaternion、 +Mirrorから提供されているSyncListやSyncDictなどのリストや辞書である。 + 10行目のCommand attributeを関数に付与することで、ClientがServerに対してこの関数を呼び出すことが可能になる。 Server側で処理が行われ、その結果の状態がClientへ同期される。 -また、SyncVar attirbuteをフィールド変数に付与することで自動的に、データが同期されるようになる。 -サポートされている型はC\#のプリミティブ型やstring、Unity APIから提供されているVector3やQuaternion、 -Mirrorから提供されているSyncListやSyncDictなどのリストや辞書である。 + +Mirrorには上記のような通信フレームワークとして便利な機能が用意されており、OSSなためプロジェクトに合わせて自由に機能の拡張が可能である。 +一方で公式Serverなどのサービスが用意されていないため、自前でServerを用意する必要がある。 +そのため、LAN上で通信を行う場合には特に問題ないが、インターネット上に公開を手軽に行うことができない。 + \section{ChristieをC\#に書き換える意義}
--- a/Paper/chapter/3-ChristieSharp.tex Wed Feb 09 04:00:56 2022 +0900 +++ b/Paper/chapter/3-ChristieSharp.tex Wed Feb 09 18:54:48 2022 +0900 @@ -6,12 +6,4 @@ \lstinputlisting[label=src:CSStartCGExample, caption=Chrisite SharpにおけるStartCodeGearの記述例]{src/cs/StartCountUp.cs} \lstinputlisting[label=src:CSCGExample, caption=Chrisite SharpにおけるCodeGearの記述例]{src/cs/CountUpper.cs} -\lstinputlisting[label=src:CSCountExample, caption=Chrisite SharpにおけるDGとして送信されるオブジェクトのクラス]{src/cs/CountObject.cs} - -\section{Topology Manager} -% 移植時の問題 - - -\section{2nd key} -% TopologyManagerでのHashMapを全て送っている問題 - +\lstinputlisting[label=src:CSCountExample, caption=Chrisite SharpにおけるDGとして送信されるオブジェクトのクラス]{src/cs/CountObject.cs} \ No newline at end of file
--- a/Paper/src/Library/MirrorExample.cs Wed Feb 09 04:00:56 2022 +0900 +++ b/Paper/src/Library/MirrorExample.cs Wed Feb 09 18:54:48 2022 +0900 @@ -2,9 +2,9 @@ [SyncVar] float speed = 1f; public override void OnStartServer() { - speed = Random.Range(0f, 10f); + speed = Random.Range(1f, 10f); } - + void FixedUpdate() { if (isLocalPlayer) { float x = Input.GetAxis("Horizontal");