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の利点}
 
 
Binary file Paper/images/MirrorConnection.graffle has changed
Binary file Paper/images/MirrorConnection.pdf has changed
Binary file Paper/master_paper.pdf has changed
--- /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);
+    }
+}