ゲーム内のユーザーのアクションやその他のアクションに基づき、UI 要素が表示されたり、消えたり変化したりする動的な UI を作成する場合は、カスタム·ロジックに基づいて新しい UI 要素をインスタンス化するスクリプトを作成する必要があるかもしれません。
簡単に動的に UI 要素をインスタンス化できるようにするための最初のステップは、インスタンス化したい UI 要素のタイプのためのプレハブを作成することです。シーン内でどのように見えてほしいかの UI 要素を設定し、その後、プレハブにするためにプロジェクトビューにその要素をドラッグします。
例えばボタンのプレハブは、イメージコンポーネントとボタンコンポーネント、それに子ゲームオブジェクトとしてテキストコンポーネントを持つ可能性があります。セットアップは、ニーズに応じて異なるかもしれません。
なぜビジュアルやあらゆるものを含む各種制御を作成するための API メソッドが用意されていないのか、あなたは疑問に思うかもしれません。その理由は、方法が無限に存在するからです。例えばボタンは、セットアップする事ができます。画像、テキスト、またはその両方を使用しているかもしれません。複数の画像を使用している可能性もあります。テキストのフォント、色、フォントサイズ、および位置はどうなっているでしょうか。画像は単体のスプライトなのか、または複数のスプライトを使用しているのか。 プレハブを作成し、それをインスタンス化することで、望むとおりにそれらを設定することができます。そして、後からデザインや UI の見た目などを変更したい場合、プレハブの設定を変更するだけで、 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 要素をインスタンス化している場合、それらすべてが同じように見えるようにしたい、同じことを行いたいと思うでしょう。それはメニューにあるボタン、インベントリ内のアイテム、または何か他のものかどうかにかかわらず、個々のアイテムが別のテキストまたは画像を持ってきたり、相互作用したときに別のことを行ったりすることを望むでしょう。
これはさまざまなコンポーネントを取得し、それらのプロパティを変更させることによって行われます。スクリプトリファレンスの Image と Text コンポーネントを参照してください。スクリプトから UnityEvent で作業する方法を示しています。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.