名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

スクリプトの処理を軽くするために

皆さんこんにちは!おさるです。

コロナの新規感染者がどんどん減り、いい方向に向かっていますね!また増えないよう個人でしっかりと対策を取っていきましょう。

今日はスクリプトの処理を軽くするために注意することを書いていこうと思います。

①GetComponentが常に呼ばれていないか

GetComponentは重い処理なので頻繫に呼び出すことがないように注意しましょう。基本的にはインスペクターで登録したりStart関数でキャッシュしておいて、Update関数などに書く場合はフラグなどで一度しか通らないようにしましょう。また、当たり判定処理やLeanTweenなどにも注意しましょう。自分は当たり判定処理を見落としていたことがありました。

②transformはなるべくキャッシュ

Unityでゲームオブジェクトのトランスフォームを取得するためによくtransformを使うと思います。ですが内部的にGetComponentをしているため少し遅いようです。なるべくキャッシュしたほうがいいみたいです。

③コルーチンの停止処理を毎回newしない

コルーチンを頻繫に呼び出す際に毎回WaitForSecondsをnewするとメモリにゴミが発生し、ゴミを片付けるために重いガベージコレクションの処理が走ってゲームのフレームレート(FPS)が落ちるみたいです。自分も知らなかったのですがWaitForSeconds等はキャッシュできるようなのでキャッシュすることで防げるようです。

自分はこれらを解決することで重くなっている問題を修正できました。すべてに共通してキャッシュにかかわる問題でした。自分の場合はOnCollisionStayのGetComponentが一番良くなかったみたいです。

参考にした記事を載せておきます

qiita.com

light11.hatenadiary.com

moon-bear.com

以上おさるでした!