夕方ゲーム制作スマートフォン用の表示で見る夕方ゲーム制作プログラミング初心者がUnityでゲームを作る日記この広告は、90日以上更新していないブログに表示しています。2018-07-15Unity製アプリが遅いので軽量化したUnityで製作中のゲームアプリが、実機で動かすととにかく重かったので、何とかまともに動くまでに軽くしました。次にアプリを作るときに同じ罠に嵌らぬよう、やったことをここにメモしておきます。因みに自分はUnity、プログラミングともにずぶの素人なので技術的に見るべき所は無いと思いますが、まぁ一応書いときます。最初の状態android実機でアプリを動かしてみると、だいたい15~25fpsといった感じで、まともな操作も覚束ないといった紙芝居状態でした。自分の超安物の型落ちオンボロスマホにはやはり荷が重いのかとも思いましたが、ドット絵調のちっさいテクスチャでここまで遅いのはやっぱりおかしいだろうと調べてみました。やったことUpdate()を呼ばないようにしたProfilerを見ていると、敵キャラクタが沢山出てきたとき、それぞれのインスタンスのUpdate()を呼び出しているところが結構時間を食っていることが分かりました。一個一個は小さい時間ですが、オブジェクト数が多くなってくると割と無視できないみたいです。そこで、Update()は誰か代表のクラスが受け取って、他のクラス達にそれを通知する、といった感じにすることでなるべくUpdate()が呼ばれないようにしました。これを実装した所fpsは3~5くらい改善しました。代表で受け取るクラスを工夫すればUpdate()が呼ばれる順番が制御できそうで、これは結構でかいおまけ効果な気がします。isStaticを使った自分のゲームには、ブロック状のオブジェクトがたくさん出てくるのですが、これを一つ一つ描画してるのがまずいんじゃね?と思ったので調べた所、動かないオブジェクトならgameObject.isStatic=true;にすると一気に描画ができる、みたいな情報が見つかりました。これをやったところ、fpsは若干改善した、気がします。目に見える変化は無かったような・・・。簡単に実装できたし、やらないよりはマシと思います。重い処理をキャッシュしたUnityの軽量化について調べていると、色んな所でFindとGetComponentは重いぞ、という情報が目に付きました。毎フレームGetComponentするようなのは論外みたい。解決方法として、FindやGetComponentの返り値を仕舞っておく変数を用意して、それを後生大事に使い回すのが良いらしい、そしてこれをキャッシュする、と言うらしい。いうのが分かりました。いう単語を知ってれば検索の手間も省けるんでしょうね・・・。これもなんか効果がいまいち分かりづらい。スクリプトを書き換えるのにかなり骨が折れたので、これだけ書き換えればfps1000くらい行くんじゃないかと勝手な期待をしすぎたのがアレだったのかも知れませんが。SetActiveを使った改良前はUIの表示/非表示を切り替える方法が分からなかったので、Imageのアルファを0か1にして出したり消したりしていました。これはアルファが0でもガッツリ描画処理が動いていて、しかも半透明扱いでゲロ重い処理のようでした。それならUIをカメラの外に出せば描画処理が動かないのではと重い、非表示にするときにpositionのx座標を1億くらいにして遠くにぶっ飛ばすようにしてみましたが、大した効果はありませんでした。いうかこれどう考えても正攻法じゃない・・・。そこで表示/非表示を切り替える処理を調べた所、SetActive(bool)という、普通にGameObjectの有効化と無効化ができるやつが見つかりました。メソッド名からしてハナからこれ使っとけって感じのやつですね。なんで見落としてたんだ。スクリプトを書き換えると、fpsが劇的に改善し、大体45~60くらいは出るようになりました。これだけ出てれば十分ですね。いうわけで、Profilerとにらめっこしつつ色々やりましたが結局こんなしょうもないやつが主犯でした。まとめ・オブジェクトの表示/非表示切り替えには、アルファの変更ではなくSetActive(bool)を使う。アルファを0にしても普通に描画処理が動くのでめっちゃ重い。・個々のオブジェクトでUpdate()を呼ぶのは控える。代表者がUpdate()を受け取って他に知らせる仕組みにする。・FindやGetComponentは返り値をとっといて延々と使い回す。・地形とかの動かないオブジェクトはisStatic=trueにする。結論これ正攻法じゃないな、と感じたら面倒がらずにGoogle検索するべき。読者になる検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログPro最新記事Unity製アプリが遅いので軽量化した使用した効果音素材Unityでタワーディフェンスゲーム制作3Unityでタワーディフェンスゲーム制作2Unityでタワーディフェンスゲーム制作1月別アーカイブはてなブログをはじめよう!yu-gatasanさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。