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使用率を削減出来そう?
コメント