実現したいこと
こんにちは。見てくださりありがとうございます。
UIなどをInstantiateによって動的に生成したいと考えたとき、実行してから配置されるのでEditor状態で自由な編集ができないですが、それを可能にする代替案のようなものを募集しております。
発生している問題・分からないこと
いきなりたとえで申し訳ないのですが、マイクラのHPバーをUnityで例えば実装するとき
スケーラブル(コマンドでHPを増やすなどなど)にするためには、GUIのハートオブジェクトをPrefab化する必要がありますよね?
また、実際のHP値をGUIに反映させるために、すべてのハートオブジェクトの参照を持っていなければなりません。
よって、ゲーム開始時にInstantiateをforで回して生成、返り値のゲームオブジェクトをキャッシュしておくという発想になりました。
しかし、
これではたとえばゲームプレイしていない状態でのGUIの配置(位置、マージンなど)、デザインの調整が視覚的かつ迅速にできないという問題に直面します。
これはどうするべきなのでしょうか?
該当のソースコード
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
思いついた実装方法としては
- ExecuteAlways または ExecuteInEditMode を使う
- Layout Group と ダミーオブジェクト の併用
- ハートの最大数をあらかじめ並べておく
なのですが、
ExecuteAlwaysは常に起動しているのでリソースを食いますし、バグがあればクラッシュするおそれもあります。また、意図せずSceneに差分が生じる可能性もあると思いました。
LayoutGroupとダミーの併用については、今回はHPバーだからこの方法が通用しそうですがもうすこし複雑なものなら対応できないと思いました。特に例えばスキルツリーの実装など?
ハートの最大数をあらかじめ並べておくという手法も、これもまた数が少ないなら良いのですがクッキークリッカーのツリーのように複雑で巨大なものを並べてInspectorで紐づけるのはあまりにも非効率的ですよね、、、。
補足
Unity6
Windows11