質問: unity初心者です。スマホ用ゲーム想定です。 unityでゲーム制作をしているのですが、たまにカクつくためプロファイルを使用したところ、gfx.processsCommandsの割合が多かったため「ヒエラルキーに同時に存在するオブジェクトの数が多いのでは?」と考えました。これまでリザルト画面などはヒエラルキーにそのまま置いといて、ボス撃破処理でSetAciveするような方式を取っていました。ボス撃破時以外はチェックを外した状態SetAcive(false)にしていたので、勝手にそこまで負荷は大きくならんだろうと考えていました。(この辺の知識もあやふやなので間違いなどあれば教えてほしいです) しかし今回カクつきを抑えたいということで、普段使わないイベント関連のオブジェクトは全部プレハブ化して必要な時だけInstantiateしたほうが処理が軽くなるのではないかと考え、作業しております。問題はここからなのですが、リザルトを閉じるための「OKボタン」などもプレハブ化することになるのですが、プレハブからヒエラルキーにあるオブジェクトは参照できないため、「OKボタン」にOnClickでリザルトを閉じる作業をさせる事が出来ません。(リザルトやバトル中のイベントは全てヒエラルキーに存在するイベントマネージャースクリプトに任せている) ボタンなどのUIをプレハブ化したい場合どのような処理をすればよいのでしょうか。また、一般的にイベントなどのゲームUIは上記の思想に基づきプレハブ化するのが良いものなのでしょうか? 厳密にはプログラミングではないかもしれませんが、知恵袋等では回答が得られなかったためこちらで質問させてください。 何卒よろしくお願いします。
回答: ■負荷の話 Activeがfalseの状態の時は、何もロードされず、負荷もありません。 なのでプレハブ化では解決しないかなと思います。 sakura_hanaさんの仰る通り、何で負荷がかかっているのかを調べてみてください。 パーティクルなど使っている場合は怪しいです。 ■UIのイベントの話 Activeでなければ負荷はかからないので、シーンに置いておく、で基本は大丈夫です。 ただごちゃごちゃになってしまうのと、再利用する場合の初期化が面倒なので、 普段必要ないもの(リザルトや、スタートメニュー、ショップメニュー等など)は、プレハブ化すると良いでしょう。 プレハブ化する場合は、リザルト画面をInstantiateした直後に、 リザルト画面の閉じるボタンを取得し、押されたときの処理を登録すると良いです。 例 ボスを倒した BattleManagerがボスが倒されたことを知る BattleManagerがリザルト画面をInstantiateし、閉じるボタンを取得 BattleManagerの、OnResultEnd()を、閉じるボタンに登録しておく ボタンが押され、OnResultEnd()が呼ばれたら、リザルト画面を消去、戦闘終了