18
|
1 \chapter{ChristieのUnityへの対応}
|
|
2
|
|
3 \section{Unity}
|
|
4 UnityはUnity Technologiesが開発、公開しているゲームエンジンである。
|
|
5 画像や3Dモデルの表示、物理演算、UIのイベント機能などゲーム制作に必要な機能が標準で備わっており、
|
|
6 個人でもゲーム開発が可能となっている。
|
|
7 さまざまなプラットフォームに対応可能であり、PC、iOS、Androidやその他コンシューマ機器も開発可能である。
|
|
8 また、非常に動作が軽いことも特徴であり、スペックが低いノートPCでも十分ゲーム開発が可能である。
|
|
9
|
|
10 プログラミング言語としてはC\#がサポートされている。
|
|
11 最新バージョンである2021.2.8ではC\# 9がサポートされており、
|
|
12 .NET Frameworkはバージョン4.6に対応している。
|
|
13 C\#向けの既存のAPIや外部ライブラリ、Unity用に開発されたAPIなども使用可能である。
|
|
14 拡張性が高く、開発に必要な機能を作成しUnityのメニューから実行することも可能である。
|
|
15
|
|
16
|
|
17 本研究では、開発環境を整えるためのハードルの低さ、公開されている通信ライブラリの豊富さなどを考慮しUnityを採用した。
|
|
18
|
|
19
|
|
20 \section{Christie Sharpの書き換えの基本方針}
|
|
21 Javaで記述されたChristieと区別するため、C\#で記述するChristieをChrisite Sharpとする。
|
|
22 Chrisite Sharpではコードの保守性や、Christie設計時の意図などを守るため、Chrisiteと同じ挙動、同じ動作をする必要がある。
|
|
23 初めにC\#単体で動作するように、Christieの核となる部分の書き換えを行った。
|
|
24
|
|
25
|
|
26 ChristieはJava 9から開発されていたため、現在では非推奨なコードやバージョンアップが必要な箇所が存在する。
|
|
27 そこで書き換えを行う際に、C\#に対応しつつ処理動作の向上や最適化を行うために以下の改良を行った。
|
|
28
|
|
29 \begin{itemize}
|
|
30 \item MessagePackの変更及びバージョンアップ
|
|
31 \item ThreadPoolからTaskへの変更
|
|
32 \end{itemize}
|
|
33
|
|
34
|
|
35 \section{attributeの実装}
|
|
36 ChristieではDGを取得する際に、annotationを用いてTakeやPeekなどのコマンドを処理していた。
|
|
37 Christie Sharpはannotationではなく、代わりにattributeを利用してコマンドの処理を行っている。
|
|
38
|
|
39 \lstinputlisting[label=src:JavaTakeImple, caption=JavaにおけるTake annotationの実装]{src/Take.java}
|
|
40 \lstinputlisting[label=src:CSTakeImple, caption=C\#におけるTake attributeの実装]{src/Take.cs}
|
|
41
|
|
42 ソースコード\ref{src:JavaTakeImple}はJavaにおけるTake annotationの実装である。
|
|
43 Javaでannotationを自作する際には、\@interfaceで宣言を行う。
|
|
44 1行目ではannotationの適用可能箇所を指定しておりフィールド変数に対して付与可能としている。
|
|
45 また、2行目はannotationの情報をどの段階まで保持するかを指定しており、Takeの場合JVMによって保存され、ランタイム環境で使用可能となっている。
|
|
46
|
|
47 ソースコード\ref{src:CSTakeImple}はC\#におけるTake attributeの実装である。
|
|
48 C\#でattributeを自作する際には、System.Attributeを継承する必要がある。
|
|
49 attributeの適用可能箇所については、1行目にてフィールド変数を指定している。
|
|
50
|
|
51 %attributeの使用方法について
|
|
52
|
|
53
|
|
54 \section{TaskによるCGの処理}
|
|
55
|
|
56
|
|
57
|
|
58 \section{MessagePackの変更}
|
|
59
|
|
60
|
|
61 \section{送信データの修正}
|
|
62
|