原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】負荷削減のTipsとか

突然の通知

GooglePlayにアプリをリリースして開発者登録をしていると時折Googleから通知メールが届くのですが、大抵(ってかほとんど)が英語で書かれているので、学生時代に英語が嫌いすぎて理系を選択した私としては読むのが面倒でそのまま放置していました。が、しかし、、先日、何気にGoogleのコンソールを開くと赤枠でデカデカと「ポリシー違反のため、1 つ以上のアプリが Designed for Families プログラムから削除されました。」との表示が。

 

どうやらGooglePlayのポリシーが最近変更になったようで、おそらく「交換条件として広告を表示してはいけない」ってのに違反していると思われる。


つまり、「広告を視聴するとスタミナ回復」だとか「広告視聴でコンティニュー」だとかが軒並みNGということで、イヤイヤ、

 

f:id:Karvan:20190129201805p:plain


それじゃぁ「ステージクリア毎に広告を強制表示」みたいな手法が良いっていう事?それはウザすぎる。いまさらバナー広告に移行しようとは思わないし、もういいや。。。ってこれも放置していたら、当該アプリのAdwordsの広告表示回数が10分の1以下になった。ギャフン

 

そして宣伝

そんな感じでGoogleから虐げられながらも近々リリース予定のアプリの宣伝

 

「Dull Things No Life」では左右に動いて障害物を避ける以外に、画面をタップすることで主機であるMotorBikeに独自のアクションをさせて障害物をかわす事ができます。

 

アクションの種類は3種類で、それぞれ目の前の障害物に応じてMotorBikeが自動的に判断し、その動作を行います。

 

■ドリフト

f:id:Karvan:20190129202017g:plain

 

■ジャンプ

f:id:Karvan:20190129202121g:plain

 

■スライディング

f:id:Karvan:20190129202221g:plain

 

ただ、いつでもタップすればよい、と言うわけではなくてMotorBikeの前方にある黄色いラインに障害物が差し掛かると赤色に変わるので、そのタイミングで画面をタップします。

 

要は音ゲーで良くある、ここのラインにノーツがきたらタップ!と同じ操作だと思ってください。

 

このアクション動作による回避方法は「Dull Things No Life」では非常に重要で、障害物の一部にはアクション動作をさせないと回避不可なものがあります。

 

次回は「Dull Things No Life」で登場する特殊な障害物について紹介したいと思います。

 

負荷軽減をしなくては・・・

携帯向けのアプリを作成しているとどうしても突き当たる問題が、開発用PCと実機(携帯端末)とのスペック差

 

前回の記事でも書いたようにPC上ではスムーズに動くのに実機ではモッサリ動作、音楽と同期させようとするとズレて動作したりなどゲームとして成り立たなくなるので出来るだけ軽量に動くように対処する必要があります。

 

負荷軽減のまず第一歩としてよく取り上げれるのは「ドローコール(SetPassCall)を減らす」と言う題目で以下のような対処方法が有名です。

 

ドローコール(SetPassCall)を減らす対策

  • 動かないオブジェクトはstaticにチェックを入れておく
  • 複数マテリアルを1つのテクスチャにまとめる
  • メッシュの結合を行う(専用アセットが必要です「Mesh Baker」とか)
  • カメラのEffectをはずす
  • 影を描画しない

 

これらは確かに有効な方法ですが、主にGPU負荷に対する軽減策となっているのでCPUの負荷に対してはスクリプトを見直す必要があります。

 

スクリプトによる負荷軽減

スクリプトの見直しとして主に取り上げられる対策は

  • 不要なStart,Updateメソッドを削除する
  • FindやGetComponentなど処理の重いメソッドを減らす
  • JobSystemを使ってマルチスレッドで処理する
  • foreachやstringの結合などGCが発生するものは避ける

 

等がありますが、これに加えて以下の方法も意外と有効です。

 

  • gameObject.tag == "タグ"ではなく gameObject.CompareTag("タグ")を使う

 

  • Materialのプロパティを操作をする際に文字列でなくユニーク ID で指定する
int material_Color = Shader.PropertyToID(“_Color”);
material.SetColor(material_Color, Color.white);

 

  • Animatorのステートの指定は文字列でなくHash値を使用する
int anim_Attack = Animator.StringToHash(“attack”);
animator.SetTrigger(anim_Attack);

 

それでもダメなら・・・

上記の対策をしても未だモッサリ動作が直らない場合は、画面の解像度を下げる、という手があります。

ここ最近の携帯端末はカメラの性能競争が激しく、結果としてゲームを動かすにはオーバースペック気味の解像度を持ってたりします。

 

なので、この解像度を下げることでGPUの描画性能を上げて負荷軽減につなげる手法です。やり方はScreen.SetResolutionで画面の解像度を指定するだけ。

 

Screen.SetResolution( Screen.width*0.5f , Screen.height*0.5f, true);

 

上記の場合は解像度を半分に下げています。携帯の画面サイズだと解像度が半減したとしても意外とバレません。


ただ、テキスト等のUIも解像度が半減するのでネイティブ解像度と比較して若干見難くなるかもしれないので注意が必要です。

 

ドローコールやらスクリプトやら見直した後の最後の切り札として使ったほうが良いかと思います。

 

参考資料:

qiita.com

baba-s.hatenablog.com

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。