Unity

Unity学習

Unity アンドロイド端末で起動時ゲームが重い時の対処法 Rendering Device.Present が原因の時 まとめ

いろいろ調べた結果実際にやってみてRenderingを減らせた方法をまとめました。

・対策した原因1 ビルド時にマルチスレッド機能を使用していない シングルスレッドビルドからマルチスレッドビルドでの検証
メリット マルチスレッドなので古いアンドロイドほど効果を発揮する
デメリット mp4など動画再生時ちらつきが発生する場合がある

f:id:runarunaoukoku:20190422174228p:plain

設定後 マルチスレッド実機ビルド後 平均Total10~20下げることができた
実機で触ってみた感触: 全体的にもっさり感がなくなった気がする  戦闘時のアニメーションはたいして変らない印象だった

・対策した原因2 垂直同期を切る
ProjectSettings→Quality→VSyncCountをDon'tSyncに変更。

メリット 画像処理が速くなる WebGL版でも軽くなる
デメリット ティアリングが発生
画像をきれいに出力してくる機能がoffになる
f:id:runarunaoukoku:20190422174511p:plain

f:id:runarunaoukoku:20190422174522p:plain

・対策した原因3 32 bit display bufferを無効化
メリット 無効化すると16bitになるので処理速度は32bitより早くなります。
デメリット 16bitではグラデーションなどで階調がなめらかに出ず縞模様のようになることもあります。
f:id:runarunaoukoku:20190422175801p:plain
Playerの設定から32 bit display bufferを無効化

最後にすべて適応した結果
f:id:runarunaoukoku:20190422175849p:plain

f:id:runarunaoukoku:20190422175907p:plain

本当に少しだけFPSが減りました。。。随時調べます。。。
・対策した原因4 画画像を使用しているマテリアル 項目変更
画画像を使用しているマテリアルの「Shader」の項目を「Standard」に切り替えてみました(半透明にしたかったので別のものに変えていたんですよね)。
Gfx.WaitForPresent が消える。

Unity アンドロイド端末で起動時ゲームが重い時の対処法 Rendering Device.Present が原因の時

今回はプロファイル[Profiler]でアンドロイドが異常に重かったので軽くするためにいろいろする記事です。

Profilerって何?って人は↓
【Unity】CPUプロファイラでパフォーマンスを改善する 前編 - テラシュールブログ

そもそもアンドロイドでの立ち上げの方法はこちら
UnityのRemoteProfilerを使おう - かせノート。

また、Unity2017からProfilerのTCPポートが34999に変わったので設定注意が必要です
Unity2017からProfilerのTCPポートが34999に変わった件 - Qiita

まず、今回自分が重かった場所はRendering Device.Presentが原因でした。
なのでRendering Device.Presentが重い人向けに書きます。 翻訳してるので日本語が変ですが許し

1.画像効果
カメラを確認してください。Flare Layer、Anti-aliasingなどの画像効果がある場合は無効にします。
Flare Layer
f:id:runarunaoukoku:20190419134119p:plain
Anti-aliasing
docs.unity3d.com

2 .UIの効果
すべてのUIイメージ、RawImagesとテキストをチェックしてください。
あなたが持っている場合Outline、ShadowまたはPosition As UV1コンポーネントが取り付けられImages、RawImagesそしてTexts、これは問題を引き起こす可能性があります。通常、あなたがこれの倍数を1つImageにつないでいるとき 、RawImageおよびText。

3. ライト設定
あなたの光を選択していることを確認してください決議の下の影の種類がされていないに設定され、非常に高解像度です。
f:id:runarunaoukoku:20190419134711p:plain


4.品質設定で、V同期数を同期しないに変更します。
詳しくは
UnityでのFPS設定まとめ - スマゲ

5.0アルファのスプライトと画像をチェックして無効にする

6.[プレーヤ設定]で、[Auto Graphics API]を無効にしてから、[Graphics API]を[OpenGLES2]に変更します。

7.カスタムシェーダ
カスタムシェーダ(非標準シェーダ)を使用していますか?一時的に無効にしてください。高価な、または悪い書き込みシェーダがこの問題を引き起こす可能性があります。

最後にまたバッチ処理を確認してください。 Unity Editor、ゲームウィンドウ、右上、統計情報をクリック。通常、これはCamera.Render> Drawが呼び出される回数と同じくらい遅延として表示されますが、同期時間によって数値が難読化されている可能性があります。モバイルの場合、描画が多いとパフォーマンスが低下します。モバイルでは、この数を100未満、理想的には10未満に保ちたいと思います。高いバッチ処理数 - >より少ない描画呼び出し、およびあらゆる種類の処理がバッチ処理を中断します。
あとは、
PlayerSettingsのマルチスレッドレンダリングをチェックしますか?
Unityのドキュメントhttps://docs.unity3d.com/Manual/class-PlayerSettingsiOS.htmlによると、マルチスレッドレンダリングはMetalグラフィックAPIでのみ

機能することに注意してください。MetalではなくOpenGLES2を使用しているため、マルチスレッド機能が無効になっている可能性があります。
Auto Graphics APIをチェックしてMetalを使用し、GLES2をフォールバックとして使用します。
f:id:runarunaoukoku:20190419152332p:plain

C# string型の時間と時間を比例する

たとえば時間がstring型で"2099-01-01 00:00:00"と"2099-02-02 00:00:00"でどっちが最新かとりたい時、
まずは型変換する。

string startDate="2099-01-01 00:00:00";
  // 戻り値をDateTime型にする
        public DateTime EndDate
        {
            get
            {
              // 初期化する
                DateTime ret = DateTime.MinValue;
              // string型からintへ尚且つDateTime型にしている
                DateTime.TryParse(startDate, out ret);

                return ret;
            }
        }


DateTime型の"1/1/2099 12:00:00 AM"  ==  retになる
userHomeList[j].EndDate > userHomeList[j - 1].EndDate
のように大なり小なりでいける。

【Unity】スプラッシュスクリーン 起動時のUnityロゴの部分カスタム方法

f:id:runarunaoukoku:20180330153832p:plain:w400
今更だけど自分用に記載
Unity Splash Screen settings にアクセスするには、
Edit > Project Settings > Player の順に選択します。

f:id:runarunaoukoku:20180330153538p:plain:w400

インスペクターウィンドウで、Splash Image > Splash Screen の順に進みます。f:id:runarunaoukoku:20180330151013p:plain:w400

Logosの+を選択して好きな画像を入れるだけ終わり!
f:id:runarunaoukoku:20180330151131p:plain:w400
f:id:runarunaoukoku:20180330151552g:plain

背景とかも簡単に変えられるので詳しくはこちらどうぞ
docs.unity3d.com