あなたはゲーム内のユーザーのアクションやその他のアクションに基づき,UI要素が表示されたり,消えたり変化したりする動的なUIを作成する場合は,カスタム·ロジックに基づいて新しいUI要素をインスタンス化するスクリプトを作成する必要があるかもしれません。
簡単に動的にUI要素をインスタンス化できるようにするための最初のステップは,あなたがインスタンス化したいUI要素のタイプのためにプレハブを作成することです。あなたはそれがシーン見ることを望む方法でUI要素を設定し,その後,プレハブにするためにプロジェクトビューにその要素をドラッグします。
例えば,ボタンのプレハブはイメージコンポーネント,ボタンコンポーネント,テキストコンポーネントを持つ子ゲームオブジェクト可能性があります。あなたのセットアップは,あなたのニーズに応じて異なる場合があります。
なぜ私たちはビジュアルとすべてのものを含む各種制御を作成するためのAPIメソッドを持っていないのか,あなたは不思議に思うかもしれません。その理由は,方法が無限に存在することです。例えばボタンは,セットアップである可能性があります。それは,画像,テキスト,またはその両方を使用していますか?多分複数の画像?テキストのフォント,色,フォントサイズ,および整列は何ですか?画像は何スプライトまたはスプライトを使用する必要がありますか?あなたはプレハブを作成し,それをインスタンス化することで,あなたは望むとおりにそれらを設定することができます。そして,あなたは後でデザインやをUIの“look and feel”を変更したい場合,あなただけのプレハブを変更することができます。その後,それは,あなたのUIに反映され,動的に作成されたUIを含みます。
UI要素のプレハブはインスタンス化メソッドを使用して通常どおりにインスタンス化されます。インスタンス化されたUI要素の親を設定する場合,worldPositionStaysパラメーターをfalseに設定したTransform.SetParentメソッドを使用して行うことをお勧めします。
UI要素は通常,そののRectトランスフォームを用いて配置されます。UI要素がレイアウトグループの子である場合は,自動的に配置され,位置を決めるステップを省略することができます。
Rectトランスフォームの位置決めをするとき,それは最初に任意のストレッチング動作をするかしないを判断するために便利です。anchorMinとanchorMaxのプロパティが同一でないとき,ストレッチ動作が起こります。
ストレッチングしないRectはトランスフォームのための位置はanchoredPositionとsizeDeltaのプロパティを設定することで,最も簡単に設定されてます。anchoredPositionはアンカーにピボットの位置を指定します。全く伸びがないときのサイズとsizeDeltaのサイズはちょうど同じです。
ストレッチングRectトランスフォームのためにoffsetMinとoffsetMaxプロパティを使用して位置を設定すると簡単にできます。offsetMinプロパティは,左下のアンカーにRECTと相対的に左下隅の角を指定します。offsetMaxプロパティは,右上のアンカーにRECTと相対的に右上隅の角を指定します。
動的に複数のUI要素をインスタンス化している場合,あなたはそれらすべてが同じように見えるようにしたい,同じことを行いたいと思うでしょう。それはメニューにあるボタン,インベントリ内のアイテム,または何か他のものかどうかにかかわらず,あなたは個々のアイテムが別のテキストまたは画像を持ってきたり,相互作用したときに別のことを行ったりすることを望むでしょう。
これは様々なコンポーネントを取得し,それらのプロパティを変更させることによって行われます。画像とテキストコンポーネントのスクリプティングリファレンスを参照してください。スクリプトからUnityEventsで作業する方法を示しています。