95
Help us understand the problem. What are the problem?

posted at

updated at

[現在非推奨] Unityでオンラインゲームを作るためのライブラリ、UniP2Pの紹介

現在開発中止につき非推奨です

(追記 2020/01/24)
UniP2Pは開発を中止します。リアルタイム通信ライブラリとしてUniQUICを今後制作します。

(追記 2021/04/23)
今のところ、この記事の用途を求めている場合は、Mirrorのwebrtcパッケージが割と有効ではないかと考えています。
Steamにリリースする場合ですと、MirrorのSteam Networkingを使うパッケージがあるので、その使用を推奨します。

UniP2Pとは

UniP2PはUnityにおけるリアルタイムネットワーク通信をもっとラクに実現し、民主化しようという試みから始まったプロジェクトです。マッチング以外の処理をP2P(サーバーを使わない端末間の通信)で行うことで、低遅延かつ、サーバーに負担がかからない仕組みになっています。

MITライセンスで公開しておりマッチングサーバーに対しての同時接続数にライセンス的な制限もありません。
現在確認している対応プラットフォームは、Windows,Mac,Linux,Androidとなっており、クロスプラットフォームでの通信が可能になっています。
iOSは動くとは思うんですがストアの審査の関係で今はまだ通るかは怪しいです。(人柱募集中)
将来的にはWebGLでも使えるようにWebRTCでの実装もする予定です。
小規模オンラインゲーム開発の民主化を行うことを目標に掲げています。

機能一覧

  • オブジェクトの同期
  • NetworkInstantiate
  • NetworkDestroy
  • RPC -Remote Procedure Call-
  • ルーム作成、参加
  • パケットの暗号化(AES128)
  • 鍵交換 (RSA PBKDF2)
  • NAT Traversal (STUN)
  • デバッグするためのエディタ拡張

注意点

P2P通信の性質上ネットワーク環境、特にファイアウォールやNAPTによって通信出来ない場合があります。
リレーサーバーを実装されるまでは、通信可能環境を100%に近づけることが難しいです。その点をご留意ください。
通信出来ない環境のときにエラーを出すPrefabがあるので、それをゲームに組み込むことを推奨します。

チュートリアル

UniP2Pの導入方法

マッチングサーバーの建て方

準備中...

導入方法

Githubよりダウンロードできます。いくつか依存しているライブラリもあるので、READMEを読んでダウンロードしてください。
https://github.com/unip2p/unip2p

UPM(Unity Package Manager)による依存ライブラリも含めたインストール方法も準備中です。

マッチングサーバーの建て方

自身でマッチングサーバーを建てる必要がありますが、
サーバーに関する知識がなくてもクラウド上で導入、管理できるようなものを用意しています。

チュートリアル

準備中...

完成品プロジェクト

P2P Tanks

UNET Tanks DemoのUniP2P移植版です。
完全な移植が完了次第別リポジトリに分離します。
UniP2Pのパッケージに同梱されています。
https://github.com/unip2p/unip2p

実装予定

おおよそ上から順番に実装していきます。

  • パケットの再送処理、順序制御
  • SyncComponentの追加 (Animator etc...)
  • Roomの検索
  • LAN Only P2P Matching
  • Large Packet Transfer
  • STUN IPv6対応
  • Relay Matching Server
  • Template Game Project
  • Voice and Video Chat
  • WebGL(WebRTC and Skyway)
  • WebGL over UniP2P

まとめ

個人でUnityでリアルタイムネットワーク通信をする際にどうにもベストプラクティスがないように思えて製作しました。

UNETは公式がグッバイ、ConnectedGamesは一年経っても暗号化されない...、Photonはリレーサーバ経由が必須でバズった時とかLAN内環境に非対応、Mirrorはイケてる。その辺のライブラリのいいとこ取りをしたものが欲しかったのです。
サーバーレスでNAT越えする時はちゃんとやって、LAN内だと外を経由せずに通信する。後は自分でソースコードが弄れればどうとでもなる設計。その辺を目指して作りました。
今後急務なのは、再送処理とチュートリアル。他の機能は最悪各自で実装してくれ!
ついでにPullRequestを投げてくれれば、Good Job!
後はLAN内探索があればマッチングサーバーを建てることなく閉じた環境で使えます。

このライブラリは現在(2019/05/21時点)α版です。そのため不具合や機能不備等があります。
玄人の方はぜひIssueやPullRequestを送っていただけると有難いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
95
Help us understand the problem. What are the problem?