0623ゼミ

0623ゼミ

# 研究目的

  • ゲームの通信方式にはクライアントサーバ方式とp2p方式がある
  • データの安全性やチート対策などでクライアントサーバ方式が主流
  • サーバに接続してマルチプレイなどのデータ同期を実現させているため、低速
  • 高速かつ安全に通信を行たい
    • 並列分散フレームワークChristieがある
    • Christieを利用してp2pで通信を行う
  • ゲーム開発で主に使用されているUnityに対応するためにChristieをC#へ書き換えを行う

# 先週・今週の進捗

  • とりあえずUnityで使われている通信フレームワークについていくつか調べてみた
  • Christieの書き換えはまあまあ順調
  • my new gear…(mac book pro 16inch)

# Unityで使用されている通信フレームワーク(ライブラリ)

  • Photon Unity Network2
    • クライアントサーバ方式
    • ホストがroomを作成してそこに合流する形式が主流
    • 20人まで接続無料
  • MagicOnion
    • .NET Core/Unity用のリアルタイム通信フレームワーク
    • クライアントサーバ方式
    • サーバ側の実装(関数など)をクライアント側で簡単に呼び出せる
  • LiteNetLib
    • クライアントサーバ方式
    • UDPらしい
  • Unet
    • 古のUnity公式通信フレームワーク
    • 公式のサポート(例題、リファレンスなど)がほとんどなし
    • あまりのクソさに廃止…
  • multiplayer
    • Unetの次代のUnity公式通信フレームワーク
    • まだα版

# Christieの書き換え進捗

今はDataGear・CodeGear部分の書き換えを行なっています 時間はかかりそうだけど今のところ順調

javaのatomicintagerがなかったり、int型の読み書きくらいはスレッドセーフらしい(本当か…?)が、とりあえず一通り書いて動かしてみてから動作確認をしようと思ってます。


java public static <T> Class<T> [関数名] () { }
→ Class<T> は返り値の型
→その前の<T>はジェネリスクメソッドの型を表す

C# public static Type [関数名]<T> () { }
→Typeは返り値の型
→関数名の直後の<T>はジェネックメソッドの型を表す


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
java
T data = null;
Class<T> clazz = null;
byte[] messsagePack = null;
MessagePack packer = new MessagePack();
// write read
messagePack = packer.write(data); 
packer.read(messagePack, clazz);


C#
T data;
Type clazz = null;
byte[] messagePack = null;
// write read
messagePack = MessagePackSerialize(data);
MessagePackSerializer.Deserialize<T>(messagePack);
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy