Unity を検索

マルチプレイヤーネットワーク機能の高レベルAPIがオープンソースに

2015年11月19日 カテゴリ: テクノロジー | 2 分 で読めます
Placeholder image Unity 2
Placeholder image Unity 2
シェア

Is this article helpful for you?

Thank you for your feedback!

結局何がオープンソースになったの?

Unityのマルチプレイヤー機能は低レベルAPIと高レベルAPIの2つのレイヤーに分かれています。低レベルAPIはトランスポートレイヤーで、おおむねNetworkTransportクラスにまとめられています。この部分はUnityエンジンの一部としてC++で書かれていて、その主目的はソケットアクセスの上に薄いレイヤーを作って提供し、パフォーマンスを最適化することでした。そしてこの上にC#で書かれた高レベルAPI(HLAPI)が存在し、この部分は拡張モジュールDLLとして存在しています。今回オープンソースになったのはこの拡張DLLの部分で、ユーザーは自由に変更・拡張して、Unityについてくるモジュールをリプレースすることができます。コードはMIT/X11ライセンスの元にリリースされていますので、利用者は特に制約を受けることなく利用でき、変更に対するコントリビューションの義務なども負いません。

2段階の抽象化

マニュアル には高レベルAPIで何ができるのかを理解するのによいオーバービューがあります。拡張DLLの中には多くのクラスがあり、大きくさらに2つのレイヤーに分けられます。NetworkClientとNetworkServerクラスを利用すれば接続を自分で管理することが出来ますし、NetworkManagerやNetworkLobbyManagerを使えば、さらに高レベルな機能を利用できます。これらのマネージャーをゲームオブジェクトに追加して、さらにビルトインのHUDコンポーネントも併用すれば、すぐにネットワーク接続を実現することが出来ます。さらに、マネージャーを拡張して振る舞いをカスタマイズすることも可能です。マネージャーはクライアント/サーバー型で、サーバー側の情報を信頼するサーバー権威型(server authoritative)としてデザインされています(加えて、クライアントの情報を信頼するよう例外的に設定するオプションもいくつかあります)。もし自分で高レベルAPIを実装したいと思う時は、これらのマネージャークラスのコードがトランスポート層の機能をどう使えば良いかの良い資料になるはずです。もし何も変えるつもりがなくても、公開されたコードを読んで高レベルAPIの機能群がどのように動作するのかを学ぶというのは常にオススメします。

ソースを改変する時のいくつかの注意事項

ソースには3つのVisual Studioプロジェクトファイルがついてきます。一つはランタイム(runtime)、そしてエディター(editor)、最後にエディター=ランタイム(editor-runtime)です。最後のエディター=ランタイムとは、エディターのPlayモード時に利用されるものです。マルチプレイヤー機能のアップデートメソッドはエンジンから直接呼ばれるため、NetworkIdentity.UNetUpdate() 関数が必要になります。これがないと実行時になにも起こりません。 また、マルチプレイヤーの機能はエディターがユーザーのコードをコンパイルする時にコード生成の処理を行っています。このコードジェネレーターはUNetWeaver といって、この部分についても今後オープンソース化することを検討しています。UNetWeaverはNetworkBehaviours をパースしてシリアライズのためのコードを生成し、Command/ClientRPC ハンドラーを作り、テーブルをルックアップし…といったことを行います。このため、SyncVarやCommandなどといったネットワーク関連のアトリビュートの名前を変更すると動作しなくなってしまいますので、この部分は変更しないようにしましょう。

オープンソースのレポジトリはBitBucketのこちらにありますBitbucket

2015年11月19日 カテゴリ: テクノロジー | 2 分 で読めます

Is this article helpful for you?

Thank you for your feedback!