FreelyApps

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


    アプリ『トランプ・ジン・ラミー』を公開しました。
    Android/iOS https://goo.gl/PYKFYG

    2015年11月

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity Multiplayerを使ってオンラインゲームを作るといったときにはUnityを同時にいくつも起動するということがあるでしょう。複数のUnityを起動することでそれぞれが1つの端末としてデバッグすることが楽になるためです。
    作っているプロジェクトを丸ごとコピーするなどしてプロジェクトを増やすと、Unityとしてはそれらが別のプロジェクトとして認識し、同時に起動することができるようになります。
    別プロジェクトだけれども内容は一緒というのは管理しにくいので、それについてはバージョン管理ソフトを使って、複数の作業フォルダを作るというのがお勧めです。

    何度もやると、Unityを複数起動するのが面倒になってきます。
    色々な所にプロジェクトがあったりすると、いちいちウィザードから選んだり、フォルダのところに行ったりでわずらわしいです。
    ……なので、これを簡単に行う方法を私なりに実践しています。

    やり方はバッチファイルからUnityのプロジェクトを指定して同時に起動するという方法です。
    Unityはコマンドプロンプトからも起動できるので、バッチファイルで起動することができます。同時に起動するためにはstartコマンドを使う必要があります。使わないとコマンドが終わるまで次のコマンドが実行できないからです。startコマンドにより、本来終了してから次へという処理が同時に行えるようになります。

    以下のような内容のバッチファイルを作れば5つのプロジェクトが同時に開けます。プロジェクトのパスは全て異なるものにしてください。
    バッチファイルの作り方はテキストエディタに以下のコマンドをコピーして、ファイルを"ファイル名.bat"と名付ければバッチファイルになります。

    ここから
    set UNITY="C:\Program Files\Unity\Editor\Unity.exe"

    start "" %UNITY% -projectPath プロジェクトのパス1
    start "" %UNITY% -projectPath プロジェクトのパス2
    start "" %UNITY% -projectPath プロジェクトのパス3
    start "" %UNITY% -projectPath プロジェクトのパス4
    start "" %UNITY% -projectPath プロジェクトのパス5
    ここまでをコピペしてください。

    プロジェクトのパス1~5にはプロジェクトのあるパスで全て異なるように指定してください。 プロジェクトのあるパスとは、AssetsとかLibraryフォルダを含んでいるフォルダへのパスのことです。絶対パスで指定する方が問題が起こらないので、そうしてください。

    最後に起動してみたデモを載せておきます。 
    pre-nosou

    バッチファイルのアイコンが画面中央に表示されています。それをダブルクリックするとバッチファイルの内容が実行されます。ウィンドウがいくつも表示されているのでちょっとわかりづらいですが、複数のUnity起動されています。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    『トランプ・ナポレオン』の通信対戦を動画で説明してみました。

    Unityを同時に5つ起動して対戦しているところを撮影しています。
    1回のゲームを通して全て入れたので、6分とかなり長めの動画になってしまいました。 動画の後半には切断時にもゲームが進行している様子もいれてみました。

    「Unity Multiplayerを使って作ったオンラインゲームってどんな感じだろう?」 ということを疑問に思っている人は参考になるかもしれません。Unity Multiplayerの解説については今後ブログに載せていくつもりですが、 字を読むよりは動画の方が気楽に見れると思います。(音楽がついていないので、そこは退屈ですが)

    アップした動画には次回のアップデートで入れる予定の新機能チャットのボタンが出ていたりします。

    YouTube版
     

    ニコニコ動画版
     

      このエントリーをはてなブックマークに追加 Clip to Evernote
    『トランプ・ナポレオン』で通信対戦を作成したときに必要だったことを書いておきます。オンラインマルチプレイヤーのゲームに必要なことは大抵同じであるので、他のものを作るときにも参考になると思います。

    大きく分けて3つに分類できるでしょう。
    通信を開始するところ、つなげてから切断するまでと切断時で分けています。一般的にオンラインゲームを作るといった場合はつなげてから切断するまでに注目されていると思います。オンラインゲームというのは通信しているときだけなので当然ですが、接続をするところと切断するところはゲームの面白さとかには関係ないですが重要です。この部分はどのように作るかが作成者の考えによって大きく変わるようなので、正解がなく難しいです。
    以下の1と3が接続をするところと切断するところであり、2が通信中のところです。
    1. マッチメイキング 
    2. 同期
    3. 切断
    マッチメイキングはオンラインで一緒に遊ぶプレイヤーを見つけるための処理です。通信を確立する段階です。他のユーザーが知り合いの場合は別として、基本的には知らない人と遊びます。
    ユーザー同士が一緒に遊ぶにはまず相手を探さなければなりません。インターネットの仕組みではIPアドレスがわかると通信ができるようになります。このIPアドレスを相手に伝えれば良いのですが、どうやって伝えるかが問題になります。

    マッチメイキングでは特定の場所(固定されている)に自分の情報を登録し相手に見つけてもらうか、その逆を行います。自分と相手が同じところにアクセスして仲介してもらうことでIPアドレスを教えあうことになるわけです。
    固定されている場所というのはサーバーになるわけですが、自前で用意しなくてもUnity Multiplayerではサービスとして提供されます。(今後有料になるかもしれませんが、まだわかりません。) 


    2つ目に同期ということを行いました。 これは複数の端末間でのゲームの進行状況の足並みをそろえるための処理です。通信自体は確立してからの話になります。
    すべての状況を一致させるということは不可能ですが、大事な情報は一致させるということで同期が必要になります。リアルタイムで刻一刻と一致させる必要な場合もあれば、特定のタイミングで全員をそろえるという場合もあります。

    『トランプ・ナポレオン』 のようなトランプゲームでは特定のタイミングで同期すれば良いです。誰が何のカードを出したかというのをカードが出されるたびに情報の共有を行い、進行させていけばうまく行きます。ランダム要素がないなら、カードの情報だけ揃えればゲームの状況は一致します。(このようなときはゲームの処理は誰が行っても同じ結果になるので、端末ごとに処理を行う分散型の設計が可能です。)
    全員の進行状況をそろえる方法は単純です。先に処理が終わったユーザーは他のユーザーが終わるのを待っていて、全員の状況が同じであると判定されたら次に進むというようにしました。


    最後に切断です。おそらく一番面倒なことです。どういったやり方が良いのかというのは自分で決めなければいけません。
    切断が起こるタイミングはわからないので、起こる可能性のある箇所には対処を入れていく必要があります。変なタイミングで切断すると、アプリが動かなくなったりすることが結構起こります。頑張ってデバッグしましょう。

    『トランプ・ナポレオン』 の対処については以前に記事にしました。切断されてもゲームが続くというように設計されています。このようなことを行うにはゲームを途中から行えるような再現機能かオンラインとオフラインの処理が融合しているような作りが必要です。
    規模が大きい場合は切断時に一旦ゲームを終了して、その後同じ状況に復帰させるという作りが安全だと思います。(切り替えに時間がかかりますが、オンラインとオフラインの処理が完全に切り離せるので問題が置きにくいはずです。) 
    オンラインとオフラインの処理が融合しているというのは同期の部分をif文で分岐しているというだけです。 各ユーザーが処理すべきところもコンピュータで処理するように置き換えるようになっていれば問題ありません。コードがわかりにくくなるデメリットが大きいですが、即座に切り替わるというのはメリットです。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    10/28に「トランプ・ナポレオン」を2.1にアップデートしました。

    宣言、副官指定のUIを修正したこととナビゲーションバーの表示の2つがアップデート内容です。 

    宣言時のUIが他のプレイヤーの宣言結果(下の画像で言うとCOM1のパスなど)が被っていたので、修正を行い被らないようになりました。この変更をするためにスートの選択を縦に並べるのではなく行列状に並べることになりました。
    d

    スートの選択方式が宣言UIで変わったことにより、副官指定のUIも同様の変更を行いました。これはスートを選択する方法が違っていて混乱しないようにするためです。
    a
     
    機能的な改善としてナビゲーションバーを表示することにしました。Backキーを押すことでアプリを終了することができます。
    ゲーム中の画面ではナビゲーションバーを非表示にしてあります。これはゲーム中に画面を大きく使いたいためと誤タップによるアプリの中断を防ぐためです。
    nback
     

      このエントリーをはてなブックマークに追加 Clip to Evernote
    10月のPVは4430でした。
    10pv
     
    9月に比べて約800程増えました。ペースはかなり落ちましたが増加しているので良しとします。おそらくは多くのPVを集めるようなヒット記事がなかったため、このようになったのでしょう。

    リリースしたアプリの更新を優先したこともあってブログの方はわずかに更新が減りました。しかしながら、アプリの更新において色々なことを体験できたため、自分の中でネタを蓄えることができたと思います。
    Unity Multiplayerについては特にそうで今後はこれについての記事を書いたりしようと思っています。

    このブログから得られる収益は広告のクリックによるものなのですが、今後はアフィリエイトにも挑戦していきたいと思っています。主に本の紹介や開発機材についてになると思います。

    このページのトップヘ