Unityで大量のオブジェクト を吹き飛ばしたい 光吉健汰
View Slide
自己紹介 ● 光吉健汰 ● 22卒サーバーサイドエンジニア ● 趣味:ゲーム ○ FPS、格闘、パズル、ストラテジー、音ゲーなど ● そろそろ実家の猫に会いたい
研修で作成したゲーム「Flick It」の負荷改善のお話 ● フリック入力で、物体を回転させ、 くっついているものを吹き飛ばすゲーム ● いっぱいくっついていると、吹き飛ばす時の爽快感が高まる ● 大量のオブジェクト+物理演算なので、 負荷が大きい 今回のお話
方針 計測、改善を繰り返し、負荷改善を図る 計測を行い、原因を絞ってから改善をしよう →闇雲に改善を行っても、効果が少ない可能性がある
計測 ● 実機で動作させながら、プロファイラで負荷を確認 Development Buildと Autoconnect Profilerを 有効にする ゲームを起動すると、 Profilerウィンドウが 立ち上がる
原因特定 ● プロファイラから、どの部分で負荷が大きいかを探る ○ Rendering:描画に関する処理 ○ Scripts:スクリプトの処理 ○ Physics:物理演算の処理
改善:描画負荷 原因 ● ポストエフェクト ● オブジェクトが多い 解決策 ● ポストエフェクトを切る ● くっついているオブジェクトの種類は少ない →GPUインスタンシングを使う
改善:物理演算負荷 原因 ● Rigidbodyの使いすぎ 解決策 ● Rigidbodyのついたオブジェクトを減らす ○ 元々の趣旨に反しているが、配置を工夫することで気付きにくくする ● 処理のシンプルな物理演算を書く ○ 今回の場合、くっついているオブジェクトは 遠心力の計算さえできれば良い
改善:スクリプト処理 原因の特定 プロファイラからどの関数が重いか特定する Updateが重い→Updateで不必要な処理をしていないか確認する
まとめ ● 研修時に行なった負荷改善を紹介した ● 負荷改善は、計測をしてから行う ● モバイル端末では、思った以上にFPSが出ない。 →必ず、端末で負荷を確認する。