FreelyApps

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


    アプリ『トランプ・7並べ』を公開しました。
    Android/iOS https://goo.gl/zsFces

    カテゴリ:Unity > バグ

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity 5.6.1f1を使用して作ったアプリをAndroid8.0で起動すると、最初に白い画面が表示されます。しばらく止まった後(初期化などしているはず)、ゲームが開始されます。
    Android8.0では、白い画面になったまま進行しなくなりました。これはAndroid8.0だけで起こるバグらしく、Android8.0以前の端末で同じアプリをインストールしてみると問題ありませんでした。

    対応するにはパッチを当てればよいそうです。Unityのパッチリリースのところにバグを直したと書いてあります。
    01

    この問題は権限の許可に関係するバグであり、それが許可されていないために止ってしまっているようでした。実機のログを見てみると、「Unable to query for permission: Fragment null must be a public static class to be  properly recreated from instance state.」というログが残っていました。

    ゲームが起動できないというバグなため、致命傷になるでしょう。使用しているUnityのバージョンが古ければ発生しませんが、新しいバージョンだと必ず発生します。公式の修正履歴にはUnity5.6以降で再現するようにあります。

    何度か試してみてわかったのですが権限をアプリ外で渡せば起動できました。Androidの設定からアプリの権限で対象のアプリに権限を付与してやると起動できるようになります。
    ユーザーはそんなことしてまで遊んでくれないでしょうけど。

    致命傷だと書きましたが、Android8.0はあまり普及してないのかもしれません。特に日本ではPixelが販売されてないため、Androidの最新バージョンはそんなに手元にないでしょう。そんなわけでAndroid8.0ユーザーが多いアプリだったら対応すれば良いかもくらいに思いました。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    次のようなログが出続けるバグがUnity 5.5.1.f1 Personalで発生しました。
    many-log

    調べてみると原因は5.5.0f3の時からあるバグのようでした。
    issue


    私の環境だと、以下の条件を満たすと発生するようです。
    1. シーンビューが2Dモードになっている
    2. Transform ToolsがRectTransform用になっている
    3. CanvasにRectTransformのwidthかheightが0のゲームオブジェクトがあり、それに子がある
    4. 上記の子のゲームオブジェクトを選択している
    非常にまれな条件で発生するように見えますが、UIを作っていると発生する可能性があります。

    問題としてはログが大量に出ることによりFPSが極端に低下しゲームが動かなくなってしまいます。
    暫定的対処として、とりあえずTransform Tools(Editorの左上にある手とか移動とか回転のツールのこと)をRectTransform用のものにしなければ良いと思います。もしくは選択しているものを変えると良いです。

      このエントリーをはてなブックマークに追加 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
    Unity4ではモバイル版のAudioClipの圧縮はMP3で行われるようになっていました。MP3はライセンス的に厳しいです。ここに具体例が挙がっていますが、ゲームで5000本以上配布したら$2500という料金というものです。タイトルごとということなので、1作ごとに約30万円程度の利益がでないと赤字です。

    Unity5ではモバイル版のAudioClipの圧縮がOgg Vorbisに変わっています。すべてのプラットフォームでOgg Vorbisがデフォルトになったようです。

    公式の解説はまだ更新が遅れているようで、Unity4のときの解説が残っています。いずれ更新されると思います。
    以下は2015/6/25時点でスクリーンショットを撮ったものです。一番下のPlatform specific detailsという項目があり、モバイルの音データの圧縮はMP3になると書いてあります。

    audioclip-miss

    ライセンス料が発生すると困る場合もあるでしょう。私も困る一人です。
    気になったのでUnityに問い合わせたところ問題なかったということでした。 

    このページのトップヘ