FreelyApps

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


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

    カテゴリ: Unity

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityをインストールして起動するとき、ライセンスの確認があります。そのときにUnityのアカウントを作って登録します。Unity Account(Unity アカウント)というのはそのことです。Asset Storeからアセットをダウンロードするときにも必要になります。

     このアカウントを作るとUnityのサービスにも使えます。(Unityのアカウントだから当然と感じますが、サービスの提供がもともと別の企業だったりするので、まだ統合の途中という印象があります。)
    • Unity Ads
    • Unity Analytics 
    • Unity Cloud Build
    • Everyplay
    がサービスとして用意されています。上から広告、分析、ビルドのクラウド化、プレイ動画シェアといった内容の機能です。
    Unity AdsとEveryplayはもともと別の会社が作ったものです。このあたりの話はこの記事に載っています。そのため、開発者のアカウントがUnityのアカウント以外でも登録が可能です。そのためか登録時にどちらにすればいいのか迷ってしまいました。
    Unity Ads、Unity Analytics、Everyplayについては実装しようと考えているので、完了したら記事にしたいと思います。今回はUnity Accountの作り方だけ備忘録として残しておきます。

    Unityをインストールしているのであれば、そのときに使ったアカウントを Webページで作るという手順を説明するだけなので、特に読まなくても問題ありません。

    このURLのページに行くとアカウントの作成かログインができます。以下のような画面です。

    NameとUsenameを設定します。Nameは本名でもかまいませんが、コミュニティ等で表示される公になるものなのでハンドルネーム的なものが良いかと思います。UsernameはIDみたいなもので既存のものと重複が許されません。適当で問題ないみたいです。
    name

    Usernameから下の画面は以下のようになります。
    Emailは自分の持っているアドレスなら何でもいいと思います。ここにメールが届くので、使い捨てメールはやめた方が良いと思います。CountryはJapanでしょうかね。(出身国とか居住国とか書いてないので、なんでも良さそう)
    Passwordは自分の管理できるものであれば何でもいいです。Confirm passwordでPasswordの確認を行うようです。同じものを入力してください。
    Security questionは人間かどうかの判定だと思われます。簡単な計算問題を解答しましょう。

    最後に「I agree to the Unity Terms of Use and Privacy Policy」をチェックして規約と個人情報の利用方針に同意したとします。
    「Get Unity news, discounts and more!」はチェックを外した方が良いと思います。(英語の記事が来ても読まないと思います。必要になったらそのときに考えましょう。)
    Create accountボタンを押して、メールが来るのを待ちます。メールにリンクが貼ってあるのでそれをクリックして登録完了になります。

     pass
    【Unity Accountの登録】の続きを読む

      このエントリーをはてなブックマークに追加 Clip to Evernote
    FPSの計測を自前で書くことはいろいろなメリットがあります。
    アプリをインストールするだけでFPSを測れることになると、チェックに必要なものが端末だけになるので 便利です。

    UnityにはProfilerというパフォーマンスを計測するための機能があります。実はこれを使うと端末で実行中のゲームのパフォーマンスが測れます。
    Android以外の場合も計測できますが、ここではAndroidだけ説明します。

    ゲームをビルドするときにデバッグできるように設定します。
    Build Settingsを開いたときに以下のようにDevelopment Buildを選択します。
    すぐに計測したい場合はAutoconnect Profilerも選択します。(ゲームのインストールが終わると自動でProfilerを開くようになります)

    bs

    Build And Runを押してビルドと端末へのインストールを行います。
    端末でゲームが起動したら、Unity側でProfilerを開きます。Profilerの上部メニューのActive Profilerを押して計測したい端末を選択します。ここでは3番目に出ているNexus 7を選択します。(私の場合です)

    prof

    選択後計測がリアルタイムで行われていきます。Wi-Fiでつないでいるようなので、Unityから認識されてからはUSBケーブルを外しても大丈夫でした。 

    確実に使うためにはBuild SettingsでDevelopment BuildとAutoconnect Profileを選択し、Build And Runを行うのが良いです。自動で計測開始してくれるのでミスが起こらないと思います。USBケーブルもつけっぱなしにしておいてください。

    公式ページにも情報がありますので参照ください。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityのエディター上では簡単にFPSを表示できます。
    ゲームビューのStatusボタンを押すと、画面の右中段に表示されます。
    簡易的に調べられるので便利です。
    実機上の確認には使用できないので端末の性能を測ることに使えません。
    つまり、リリースするときの機種次第では目安程度の意味しかありません。
    FPSが急激に変わったりすることを見つけるとかに使いましょう。

    FPSの表示をするにはOnGUIを使うのが簡単です。
    Unity UI(uGUI)を使ってもかまいません。 
    表示方法は何でも良いです。 

    FPSを測るには2通りあります。
    • 定義通り、1秒間に何回更新が行われたかカウントする方法 
    • 更新間隔を測り、その逆数をFPSとする方法
    1秒間を測りその間に何回更新されたかをカウントして、FPSを求めます。
    FPS = (更新回数)
    定義通りの値であり、整数値が返ります。利点は見やすく、ゲームの1秒ごとのパフォーマンスが把握できることです。1秒というのはそれなりに長いので、パフォーマンスが良い悪いという指標に使いやすいです。
    欠点は瞬間的なパフォーマンスの悪化を見逃すことと実装の面倒さです。
    1秒ごとというのを判定し、そのたびに初期化をして繰り返すといったことになります。

    更新間隔を測ることから求める方法は、測った更新間隔でこの後も処理が続くと仮定して1秒間に何回更新されるかを決定しています。
    FPS = 1 / (更新間隔) 
    になります。
    1フレーム前の更新時刻を 記録しておけば毎フレームFPSを求めることができます。この方法の 利点は瞬間的な処理の速さを知ることができることと実装が簡単ということです。欠点は瞬間的なゲームのパフォーマンスしか測れないことです。 

    FreelyAppsでは2番目の方法を使っています。
    そのまま使うと継続的なパフォーマンスがわかりにくいため、平均を用いてある程度の長さでのパフォーマンスを測っています。
    最新の更新間隔だけでなく、いくつか前の更新間隔も記憶しておくということです。



    fFPSとfAveFPSには毎フレーム更新された値が入ります。
    上では30フレーム分の更新間隔を平均し、その更新間隔からfAveFPSを求めました。
    この値をOnGUIかUnity UIで出せばいいわけです。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity 4では3種類の言語が使えました。
    C#、JavaScript(UnityScriptと呼ばれてます)、Booの3つです。 

    Unity 5になるとBooがなくなっています。
    公式のマニュアルやUnity上で新しくスクリプトを作るときの選択にBooがないのです。
    (実行は可能らしいですが、今後消えていくと思われます。)

    現在Unityで使えるプログラミング言語は C#とJavaScriptになります。
    JavaScriptの方はUnity独自の拡張が多くなされ、UnityScriptとも呼ばれます。 
    元のJavaScriptにはない書き方をしなければいけないことがあり、JavaScriptに慣れている人ほど混乱しそうに思います。

    C#が一番良いと思います。
    使われていることが多いですし、入門書に困ることもありません。Unity以外で使われているC#と同じように書けます。JavaScriptに比べて慣れればなれるほどC#が使いやすいと思います。 JavaScriptは読めれば良いくらいだと思っています。他の人が書いたコードに入っているときに知っておくと良いということです。

    C#を使う上で気をつけるべきことがあります。
    クラスのインスタンス生成時に呼ばれるコンストラクタを使わないということです。 

    Unityのシーンに保存されているデータと競合するからなのだと思います。 Unityのインスペクタ―でクラスの値を変更できる機能があるのですが、それを実現するにはコンストラクタでの初期化は都合が悪いことが推測できます。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityではシーンにライトを置いてShadowの設定を行えば、影が出ます。
    LightコンポーネントのShadow TypeがNo Shadows出なければいいということです。

    エディター上で確認しているときはオブジェクトの動きに合わせて影が表示されるはずです。
    これをAndroid用に出力して実機で見ると、 影が出ていないということが起きます。

    Quality Settingsで影を無効にする設定があるので、それを確認すると直ることがあります。
    影を出さなければその分処理が速くなります。画面の質と処理のどちらをとるかという設定をするところなのでこのような設定ができます。

    Quality Settingsではゲーム全体に対する有効・無効を設定できるので、 影が出るはずにもかかわらず全ての場所で出ないとすれば、その設定が原因の可能性が高いです。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    以前の記事でUnity5でアプリを作ると、immersiveモードがデフォルトで有効になっていると書きました。immersiveモードを解除して画面下部のボタン(ナビゲーションバー)を表示する方法が判明したので、備忘録として残しておきます。

    Unity 日本語へルプデスクというUnityによる公式のサポートページに解決策がそのまま載っていました。このサイトは最近できたものでUnityの質問を日本語でできるとのことです。

    そのサイトのこのページに私の知りたかった解決策が載っています。

    アプリの起動時にでも
    Screen.fullScreen = false;
    を呼んでおけばimmersiveモードが解除されます。

    とりあえずNexus 7 (2013)では作ったアプリが問題なく動作していました。
    Android 4.3以前の端末でこのコードの悪影響がないのだろうかという心配はありますが、実機がないので調べられませんでした。

    このページのトップヘ