画面外のLive2Dモデルの処理を止める【Unity】

Live2DモデルをUnityで使用する際に、出来る限り最適化したい系の挑戦#1です。

前提として、Live2Dモデルプレハブは有効であれば何処にいてもCubismModel.Update()を処理しているようです。

事前に読み込むにしても、遅延読み込みするにしても出来るだけ頻繁に生成、消去を繰り返したくない所です→(Awake()、Start()に初期設定処理GetComponent等が絡むため)

今回試すこと、やりたい事

マネージャーで一括管理するべきかもしれませんが…

完全に画面外に出たモデルのCubismModel.Update()の処理を止めます、一つでも入ったら再開します。

(最終的には見えている部分のみ処理するような形が理想ですが…。中身が良く分かってない)

コード

コード本体

コードの動き

ROPT

void Start():最初の一回

貼り付けたオブジェクトと同じ階層のCubismModel(Script)を見つける

見つからない場合は自身を無効にする(保険)

子階層のRenderer(モデルのパーツ達)を全て取得する

void Update():毎フレーム

カメラに写っているRendererを一つ見つけた時点で処理をやめる

ROPTEditor(無くても良い)

OnInspectorGUI():インスペクタで見えるものを変える

カメラが捉えているレンダラーの正確な数を表示する。

(ビルドには入りません)

使い方

結果

左:CubismModel.Update()を無効に。

真ん中:通常状態

右:オブジェクトを非アクティブに。

使いどころ

モデルを一時的にプールする場合

数体のモデルを交互に登場させる、画面内外を移動する場合。

怪しい所・改善点

処理を一時的に止めて良い箇所の把握

今回はざっくり処理のかかるCubismModelをモデルがそこに居るか居ないかによって止めてみましたが、不具合の原因にならないか調査は必要(見える弊害は特に無し)

・物理演算は遠近カメラであれば、ある程度離れているモデルは演算しなくて良さげ?

・パーツ毎に考えなくとも良い箇所を出せれば効率的にCPU使用率を削減出来そう?

コメント

タイトルとURLをコピーしました