FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    ブログを
    https://freelyapps.net/
    に移転する予定です。
    リンク切れがある記事はこちらに移動した可能性もあります。

    カテゴリ:Unity > Unity Multiplayer

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity5.3から5.4になったときにNetworkMatchつまりマッチメイキングの処理の呼び出し方法が変更されました。5.3以前の処理を書いている場合は多少修正が必要になると思います。
    書き直すのは面倒ですが、修正されているところ(マッチングのフィルタリング)があるのでやってみる価値があります。
    34
    左が5.3で右が5.4のUnityEngine.Networking.Matchのクラスの一覧です。5.3では~Requestと~Responseがたくさんあります。これらはマッチングを行うときのメソッド(NetworkMatch.CreateMatchなど)に渡す情報とマッチング処理を行ったときの結果を返すためのものです。
    5.4ではマッチングを行うときのメソッドに直接値を渡す方式のみになったため、~Requestがなくなったようです。(5.3では~Requestを渡す方法と直接値を渡す方式がありました。値を渡す方式だけ生き残ったということです。)
    ~Responseは元々冗長なクラスでした。~Responseは成功したかどうかとサーバーでのエラーについての情報とそれぞれのマッチング処理の情報という形式です。3つのメンバーしかないので、わざわざクラス化しなくても良いという判断で5.4でなくなったのではないかと思います。5.3のCreateMatchResponseJoinMatchResponseは同じ情報を持つのに違うクラスでしたし、メンバーもわざわざ基本型で書いてありました。5.4では整理されてきれいにまとまった感じです。
    あとはMatchDescMatchInfoSnapshotに変わりました。なぜ……

    5.3でCreateMatchなどを使っていた場合は、5.4のCreateMatchに合わせる必要があります。呼び出し引数が変わっているのでその対応をすれば動くはずです。いくつかのパラメータは空文字や0で無効にして呼ぶことが多いでしょう。
    requestDomainという値が重要でこれが同じ値のものとマッチングするようになっています。この値が違うとマッチングしないようになっているので、通信する内容が変わった場合は値を変えておくと問題が起きません。アプリのバージョンとかと同じように通信のバージョンを管理しておくと良いと思います。

    以前はrequestDomainに対応しているような機能があったのですが、うまく機能してなくて互換性がない状態でマッチングが起こっていました。当然、通信が発生したときに情報が解釈できずエラーになって失敗します。5.4からはこれが動いているというのを確認しました。(Windows、Mac、Android、iOSにて)
    これがあるとUnity Multiplayerに変更のあるアプリのバージョンアップを行うことができます。バージョン違いのものを住み分けることで共存できます。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity Multiplayerの料金について」でPersonal版のUnityでは20CCUの制限があり、これを取り払うことはできなさそうだと書きました。一応Unityの方に質問をしてみたのですが、やはりそうだということでした。

    Unity Multiplayerを使ったゲームを作り、制限なくオンラインを行うにはPro版を買うしかありません。つまり、商用としてオンライン機能を提供するには、Personal版の場合はUnity Multiplayer以外の方法を考えるべきということになります。
    Unity MultiplayerはUnityに組み込まれているので使いやすいものです。それだけにマッチングのためのサーバーを利用したくても利用できないという現状は残念という他ありません。将来的にアセットストアで従量課金分チケットとか売ってそうな気もしますが、今のところはPhotonとかを利用するのが賢明だと思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity Multiplayerが正式なものになり、サーバーの利用料金が公表されました。公式のページは以前と同じでここです。 
    unet-free
    まずはじめに無料で使えるものについて載っていました。Personalだと20CCU、Professional版だと200CCUまでになります。CCUはconcurrent usersの略です。同時に接続できるユーザーの数のことです。
    PersonalもProfessionalも追加料金なしで開発目的に(これがちょっと気になっています。) Unity Multiplayerを利用できるとあります。
    Professionalは利用料金が月額75ドルなので、こういった書き方をされているのでしょう。Professionalの権利を1500ドルで買っている場合はたぶんそのまま使えるのでしょう。ここに料金を載せておくと紛らわしいと思うのは私だけでしょうか?

    unet-fee

    従量課金分についてはその下に載っています。
    マッチングサーバーとリレーサーバーを使う場合は、通信量に応じて課金が発生する仕組みのようです。1GBあたり0.49ドルという設定なので、50円くらいです。これだと高いのか安いのかいまいちわかりませんね。

    サイトのもう少し下に見積もりをしてくれる入力欄があります。ここにCCUをいれて、通信の発生頻度や量を入れるとひと月当たりの費用が表示されます。
    Estimated cost/monthが入力された内容から予想される料金です。Maximum cost/monthはEXPECTED UTILIZATION ON AVERAGE (%)が100になった場合、設定した内容で限界まで使った場合の料金ということです。

    100CCUで見積もってみます。1ユーザーが1秒間に20回の通信をし、1回の通信が200バイト消費するようなオンラインゲームになっているとします。これが25%の割合で稼働しているとすると、1月の料金は119.93ドルです。通信量での課金なので、100CCUというのは常に100人がゲームの通信機能を利用しているという意味になります。よほどのことがない限り、常に最大数のユーザーが利用することはないので、同時に利用する最大人数をそのままこの見積もり欄にあるCCUにいれても見積もりはかなり大きめに出ると思います。

    unet-fee2

    料金はともかくサービスの開始時なので、いろいろ気になることが多いです。Unity Proでないとサービスを買えないとあるのも変な気がしています。
    有料のサービスは申し込むことで有効になる仕組みのようなので、自動的に料金が発生することはないようです。Personalユーザーの場合のリリース版はどうすればいいのかを発表してほしいです。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    以前の記事では、オンラインのゲームではマッチメイキング、同期、切断の3つの対応が必要だと書きました。
    現在、トランプ・ナポレオンをアップデートする予定でソースをちょっと見返しています。以前の記事ではあまり詳細まで解説していなかったので、良い機会だと思いマッチメイキングを解説してみようと思います。

    マッチメイキングにはサーバーが必要になりますが、Unity Multiplayerではそのサーバーが提供されています。そのため、サーバーの用意は不要で個人でもオンラインゲームが作れる環境があります。
    Unity MultiplayerはサービスウィンドウでUnityの各種サービスが使えるように登録をしておきましょう。これを行っておかないとエラーが発生して動きません。

    マッチメイキングにはスクリプトを書いて対応することになります。NetworkMatchを使って簡単に作ることができます。このインスタンスはNetworkManager.singleton.StartMatchMaker();のようにしてやると作られ、NetworkManagerのプロパティmatchMakerに参照が渡されます。(matchMakerははじめnullになっています。)
    NetworkMatchクラスのインスタンスが得られたら、後はそれに対して命令することでマッチする場所(ルームと呼ぶことにします。)の作成、ルームの削除、ルームへの参加、ルームからの退出、ルーム一覧の取得が可能です。
    それぞれ
    • CreateMatch
    • DestroyMatch
    • JoinMatch
    • DropConnection
    • ListMatches
    が対応します。いずれの処理も簡単に使えるものと詳細に設定ができるものが用意されています。
    CreateMatchで言うと、ルームの名前、ルームに入れる最大数、ルームの宣伝フラグ(たぶん検索に出すかということ?trueにしておけば良いらしいです。)、ルームのパスワードの4つの設定とコールバックです。CreateMatchなどの処理はすぐに終わらない非同期処理(コルーチン)なので、処理が終わったときに指定したコールバックが呼ばれる仕組みです。コールバックに処理の結果が渡されるので、それを見て適切に処理します。コールバックで特に何もしなくてもマッチングは行えます。
    詳細に設定する方では、matchAttributesというルームに対して属性をあたえることができます。この属性をListMatchesの方で指定することでルームのフィルタリングができる機能のようなのですが、残念ながら現時点では機能していません。質問したところバグだということなので、いずれ直るかと思いますが結構先のことだと思います。
    詳細版の方が良いのは設定を細かくできるためですが、面倒であれば簡易版でも十分です。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    新しいサイトの方へ引っ越しました。

    このページのトップヘ