view Poster/riono-slide.md @ 62:74fb935dc5b5 default tip

update
author riono <e165729@ie.u-ryukyu.ac.jp>
date Wed, 02 Mar 2022 13:15:50 +0900
parents 33591d662e9f
children
line wrap: on
line source

title: 継続を使用する並列分散フレームワークのUnity実装
author: Ryo Yasuda, Shinji Kono
profile: 並列信頼研
lang: Japanese
code-engine: coderay

## オンラインゲームにおけるデータ通信
* ゲームの通信方式にはクライアントサーバ方式とp2p方式がある
* データの安全性や通信環境などでクライアントサーバ方式が主流
* サーバに接続して複数ユーザのデータ同期を実現させているため、低速
* 高速に通信を行たい
    * 並列分散フレームワークChristieがある
    * ChristieはLAN上で高速に通信可能
    * TopologyManagerを使用することでLAN/WAN上で動的構築される
* ゲーム開発で主に使用されているUnityに対応するためにChristieをC#へ書き換えを行う

## Christie
- Christieは当研究室で開発している並列分散ライブラリ
- Gearという概念を持っており、DataGearによるTake/Putを使用
- クラスに相当するCodeGearとフィールド変数に相当するDataGearがある
- CodeGearに記述されたDataGearが全て揃う(代入される)とCodeGearの処理が実行される

## Unityにおけるネットワーク通信
- Unityは世界中で使用されているゲームエンジン
- 言語としてC#がサポートされている
- フレーム単位の処理が行われ、シングルスレッドで動作しているため並列処理が苦手
- Send/Recieveなどでは通信を記述しづらい
- Christieにより画面書き換えと非同期な並列処理や通信が可能

## C\#へ書き換える利点
- ChristieはJavaで実装されている
    - C\#に書き換えを行うべきか
- JavaをC\#上で呼び出す方式
    - annotationが使用できない
- Unityはandroidの開発向けにjarファイルからJavaのメソッドをC\#上で呼び出せる機能がある
    - stringを使用してリソースディレクトリから検索し、使用
    - 高速化が求められる並列分散プログラミングには不適
- 記述方法が似ているため移植が行いやすい
- ThreadPoolをC\#で統一できる

## C#へ書き換えの方針
* C\#で記述するChristieをChristie Sharpとする
* Christie設計時の意図や、互換性を保つためChristieと同じ動作をさせる
* ChristieはJava9から開発されており、非推奨なコードやが含まれている
* C\#に対応しつつ、処理動作の向上や最適化を行うために以下の変更を行った
    * MessagePackのバージョンアップ
    * ThreadPoolからTaskへ変更

## Unityの動作
<!--デモ?-->
- 水族館のデモ動画
- 2PCを使用して魚がPC間を移動
- 平均60fpsで動作を確認


## 他の通信ライブラリと機能的な比較際のChristie Sharpの利点
- Unityの既存通信ライブラリはクライアントサーバ方式のためServerを用意する必要がある
    - Server抜きのオンラインゲームが開発できる
- 並列処理には別途ライブラリを導入する必要がある
    - Christie Sharpで強力な並列処理が可能
- 通信が切断した際にゲームロジックが停止しない
    - 参照し続けるデータはPeekで取得を行うことで、データの更新されないがnullにはならない

## まとめ
* ChristieをUnityで使用するためにC#に書き換えを行った
* 書き換え方針としては、MessagePackのバージョンアップC#独自の機能に対応を行いつつ元のソースコードと同じ機能になるように実装
* Unityで動作検証を行い、正しく動作することを確認した
    * Christie Sharpを利用したゲームの開発が可能
    * 平均60fpsで動作を確認
* Take/Peek/Putを利用したゲームと相性の良いプログラミング
* Unity既存のライブラリとの比較を行った

## 今後の課題
* TopologyManagerの完成
    * 2nd keyを用いたTreeMapの通信
* Christie Sharpの性能検証を行う
    * 他の通信ライブラリとの通信速度や耐久性の検証
    * Christie Sharpを用いた100人規模のゲーム開発