Mercurial > hg > Papers > 2022 > riono-master
changeset 39:78fa97061c97
fix section
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 09 Feb 2022 04:00:56 +0900 |
parents | 36139bf7fb4c |
children | d8a999b69da4 |
files | Paper/chapter/1-Christie.tex Paper/chapter/2-RewriteCS.tex Paper/chapter/5-LibraryComparison.tex Paper/images/MirrorConnection.graffle Paper/images/MirrorConnection.pdf Paper/master_paper.pdf Paper/src/Library/MirrorExample.cs |
diffstat | 7 files changed, 123 insertions(+), 58 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/chapter/1-Christie.tex Mon Feb 07 21:15:46 2022 +0900 +++ b/Paper/chapter/1-Christie.tex Wed Feb 09 04:00:56 2022 +0900 @@ -245,3 +245,6 @@ もしDGがなければ、Remoteから来たコマンドもLocalの場合と同様にLocalDGMのwaitListに格納される。 Replyコマンドを受け取るとRemoteDGMhはwaitListに入っていたコマンドを解決し、待ち合わせが完了する。 + + +\section{Topology Manager} \ No newline at end of file
--- a/Paper/chapter/2-RewriteCS.tex Mon Feb 07 21:15:46 2022 +0900 +++ b/Paper/chapter/2-RewriteCS.tex Wed Feb 09 04:00:56 2022 +0900 @@ -1,4 +1,4 @@ -\chapter{ChristieのC\#への書き換え} +\chapter{Christieの応用} \section{Unity} UnityはUnity Technologiesが開発、公開しているゲームエンジンである。 @@ -15,7 +15,104 @@ 本研究では、開発環境を整えるためのハードルの低さ、公開されている通信ライブラリの豊富さなどを考慮しUnityを採用した。 -Unity上でChristieを動作させるために、Javaで記述されているChristieをC\#に書き換えを行う。 +%Unity上でChristieを動作させるために、Javaで記述されているChristieをC\#に書き換えを行う。 + + +\section{Photon Unity Networking 2} +Photon Unity Networking 2(以下PUN2)はUnityで利用可能なネットワークライブラリである。 +自動で他のClientへの接続や同期を可能とし、マッチメイキング機能なども備わっている。 + +\begin{figure}[htb] + \begin{center} + \includegraphics[width=130mm]{images/PUN2Connection.pdf} + \end{center} + \caption{PUN2のServer接続} + \label{fig:PUN2serverconnect} +\end{figure} + + + +図\ref{fig:PUN2serverconnect}はPUN2でのGame Serverまでの接続の過程を表した図である。 +PUN2ではサーバクライアント型の通信を行っており、Photon CloudというCloud Serverに接続することで通信を可能にしている。 +ClientはPhoton Cloudに接続を行うと、始めにName Serverに接続される。 +Name Serverでは、そのClientが利用可能なリージョンを提供し、最低PingのMaster Serverへの接続が自動で行われる。 +Master Serverでは、ゲーム全体における接続しているプレイヤーや、作成されているルーム情報などの監視を行っている。 +マッチメイキングや、新しいRoomの作成、参加などが可能である。 +各リージョンのMaster Serverは完全に分離しており、マッチメイキングはそれぞれのMaster Serverでのみ可能である。 +Game Serverでは、Master Serverで作成された各ルームの管理が行われおり、実際にClient同士の通信を行ってゲームプレイを可能としているのはGame Serverである。 + +\newpage + +% 開発面でのできること アタッチするだけとか +% 制限面 20mucみたいな 500messageとか +% ネット環境がないとlocal通信すらできない + +開発面においてはUnity API対応がされており、座標や回転データなどを持っているTransform、アニメーション、 +物理演算のRigidbodyの同期にはコードを書かずに用意されているScriptをGameObjectにAttatchするだけで同期可能となっている。 + +\lstinputlisting[label=src:Pun2Example, caption=PUN2の使用例]{src/Library/Pun2Example.cs} + +ソースコード\ref{src:Pun2Example}は、PUN2でServerに接続を行いゲーム内にプレイヤーを生成する例である。 +Callbackの使用にはMonoBehaviourPunCallbacksを継承する必要があり、MonoBehaviourPunCallbacksにはUnityのMonoBehaviourを継承しているため、 +Startメソッドなどが使用可能である。 +Startメソッドでは、事前に設定したName ServerおよびMaster Serverへの接続を行っている。 +OnConnectedToMasterメソッドはMaster Serverへ接続した際に呼ばれ、Roomへ加入を試しなければ作成を行い、 +OnJoinedRoomメソッドではGameServerにあるRoomに加入後に呼ばれ、プレイヤーの生成を行っている。 +このようにPUN2では各Serverへの接続/切断時のコールバックが豊富に用意されており、柔軟に処理を記述することが可能である。 + +しかし開発時に検証を行う際にLocalマシンで通信を行う場合などでも、Photon Cloudへの接続が必須となる。 +そのためネット環境がなければLocal通信でもPUN2を利用した通信はできない。 + + +PUN2の基本料金は無料であるが、使用上の注意としていくつかの制限がある。 +\begin{itemize} + \item 同時接続人数が20人以下 + \item 1Roomの秒間Message数が500以下 + \item データの転送量が60GB以下 + \item etc ... +\end{itemize} + +これらの制限を超えて利用する場合には、別途料金や有料プランに加入する必要が発生する。 + + +\section{Mirror} +MirrorはUnityで使用できるOSSのネットワークライブラリである。 +PUN2と同様にPC間の同期を自動で行い、主にMMO規模のネットワークを想定して開発が行われている。 +主な機能として、ServerとClientを自動接続するScript、GameObjectの位置やアニメーションの同期を行うNetworkTransfromやNetworkAnimator、 +Room機能などがある。 + +\begin{figure}[htb] + \begin{center} + \includegraphics[width=140mm]{images/MirrorConnection.pdf} + \end{center} + \caption{Mirrorの接続} + \label{fig:Mirrorconnect} +\end{figure} + + +図\ref{fig:Mirrorconnect}はServerとClientの接続を表したものである。 +Mirrorはサーバクライアント型の通信が行われている。 +HostではServerと同時にLocal Clientが立ち上がる。 +他のClinetはServerに接続を行うことで同期が可能となる。 +ClinetはServerに対して操作やデータを送信し、Serverでの処理がClientに同期され反映される仕組みになっている。 +また、Mirrorでは公式Serverなどのサービスが用意されていないため、自前でServerを用意する必要がある。 + + +\lstinputlisting[label=src:MirrorExample, caption=Mirrorの使用例]{src/Library/MirrorExample.cs} + +ソースコード\ref{src:MirrorExample}はMirrorを使用して、プレイヤーを表示、操作する例である。 +NetworkBehaviourはMonoBehaviorを継承して作成されており、ネットワーク上で動作させる処理に継承させる必要がある。 +10行目のCommand attributeを関数に付与することで、ClientがServerに対してこの関数を呼び出すことが可能になる。 +Server側で処理が行われ、その結果の状態がClientへ同期される。 + +また、SyncVar attirbuteをフィールド変数に付与することで自動的に、データが同期されるようになる。 +サポートされている型はC\#のプリミティブ型やstring、Unity APIから提供されているVector3やQuaternion、 +Mirrorから提供されているSyncListやSyncDictなどのリストや辞書である。 + +\section{ChristieをC\#に書き換える意義} + + + \section{Christie Sharpの書き換えの基本方針} Javaで記述されたChristieと区別するため、C\#で記述するChristieをChrisite Sharpとする。
--- a/Paper/chapter/5-LibraryComparison.tex Mon Feb 07 21:15:46 2022 +0900 +++ b/Paper/chapter/5-LibraryComparison.tex Wed Feb 09 04:00:56 2022 +0900 @@ -4,62 +4,6 @@ 本章では、Unityで使用可能な通信ライブラリであるPhoton Unity Networking2、MirrorとChristie Sharpの比較を行い、 Unityで使用する場合のChristie Sharpの評価を行う。 -\section{Photon Unity Networking 2} -Photon Unity Networking 2(以下PUN2)はUnityで利用可能なネットワークライブラリである。 -自動で他のClientへの接続や同期を可能とし、マッチメイキング機能なども備わっている。 - -\begin{figure}[htb] - \begin{center} - \includegraphics[width=130mm]{images/PUN2Connection.pdf} - \end{center} - \caption{PUN2のサーバ接続} - \label{fig:PUN2serverconnect} -\end{figure} - - - -図\ref{fig:PUN2serverconnect}はPUN2でのGame Serverまでの接続の過程を表した図である。 -PUN2ではサーバクライアント型の通信を行っており、Photon CloudというCloud Serverに接続することで通信を可能にしている。 -ClientはPhoton Cloudに接続を行うと、始めにName Serverに接続される。 -Name Serverでは、そのClientが利用可能なリージョンを提供し、最低PingのMaster Serverへの接続が自動で行われる。 -Master Serverでは、ゲーム全体における接続しているプレイヤーや、作成されているルーム情報などの監視を行っている。 -マッチメイキングや、新しいRoomの作成、参加などが可能である。 -各リージョンのMaster Serverは完全に分離しており、マッチメイキングはそれぞれのMaster Serverでのみ可能である。 -Game Serverでは、Master Serverで作成された各ルームの管理が行われおり、実際にClient同士の通信を行ってゲームプレイを可能としているのはGame Serverである。 - -\newpage - -% 開発面でのできること アタッチするだけとか -% 制限面 20mucみたいな 500messageとか -% ネット環境がないとlocal通信すらできない - -開発面においてはUnity API対応がされており、座標や回転データなどを持っているTransform、アニメーション、 -物理演算のRigidbodyの同期にはコードを書かずに用意されているScriptをGameObjectにAttatchするだけで同期可能となっている。 - -\lstinputlisting[label=src:Pun2Example, caption=PUN2の使用例]{src/Library/Pun2Example.cs} - -ソースコード\ref{src:Pun2Example}は、PUN2でサーバに接続を行いゲーム内にプレイヤーを生成する例である。 -Callbackの使用にはMonoBehaviourPunCallbacksを継承する必要があり、MonoBehaviourPunCallbacksにはUnityのMonoBehaviourを継承しているため、 -Startメソッドなどが使用可能である。 -Startメソッドでは、事前に設定したName ServerおよびMaster Serverへの接続を行っている。 -OnConnectedToMasterメソッドはMaster Serverへ接続した際に呼ばれ、Roomへ加入を試しなければ作成を行い、 -OnJoinedRoomメソッドではGameServerにあるRoomに加入後に呼ばれ、プレイヤーの生成を行っている。 -このようにPUN2では各サーバへの接続/切断時のコールバックが豊富に用意されており、柔軟に処理を記述することが可能である。 - - -PUN2の基本料金は無料であるが、使用上の注意としていくつかの制限がある。 -\begin{itemize} - \item 同時接続人数が20人以下 - \item 1Roomの秒間Message数が500以下 - \item データの転送量が60GB以下 - \item etc ... -\end{itemize} - -これらの制限を超えて利用する場合には、別途料金や有料プランに加入する必要が発生する。 - - -\section{Mirror} - \section{Christie Sharpの利点}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/src/Library/MirrorExample.cs Wed Feb 09 04:00:56 2022 +0900 @@ -0,0 +1,21 @@ +public class PlayerController : NetworkBehaviour { + [SyncVar] float speed = 1f; + + public override void OnStartServer() { + speed = Random.Range(0f, 10f); + } + + void FixedUpdate() { + if (isLocalPlayer) { + float x = Input.GetAxis("Horizontal"); + float z = Input.GetAxis("Vertical"); + CmdMoveSphere(x, z); + } + } + + [Command] + void CmdMoveSphere(float x, float z) { + Vector3 v = new Vector3(x + speed, 0, z + speed); + GetComponent<Rigidbody>().AddForce(v); + } +}