Version: 2020.2
言語: 日本語
World Space UI の作成
画面遷移の作成

スクリプトから UI 要素を作成する

ゲーム内のユーザーのアクションやその他のアクションに基づき、UI 要素が表示されたり、消えたり変化したりする動的な UI を作成する場合は、カスタム·ロジックに基づいて新しい UI 要素をインスタンス化するスクリプトを作成する必要があるかもしれません。

UI 要素のプレハブ作成

簡単に動的に UI 要素をインスタンス化できるようにするための最初のステップは、インスタンス化したい UI 要素のタイプのためのプレハブを作成することです。シーン内でどのように見えてほしいかの UI 要素を設定し、その後、プレハブにするためにプロジェクトビューにその要素をドラッグします。

例えばボタンのプレハブは、イメージコンポーネントとボタンコンポーネント、それに子ゲームオブジェクトとしてテキストコンポーネントを持つ可能性があります。セットアップは、ニーズに応じて異なるかもしれません。

なぜビジュアルやあらゆるものを含む各種制御を作成するための API メソッドが用意されていないのか、あなたは疑問に思うかもしれません。その理由は、方法が無限に存在するからです。例えばボタンは、セットアップする事ができます。画像、テキスト、またはその両方を使用しているかもしれません。複数の画像を使用している可能性もあります。テキストのフォント、色、フォントサイズ、および位置はどうなっているでしょうか。画像は単体のスプライトなのか、または複数のスプライトを使用しているのか。 プレハブを作成し、それをインスタンス化することで、望むとおりにそれらを設定することができます。そして、後からデザインや UI の見た目などを変更したい場合、プレハブの設定を変更するだけで、 UI にも反映されます。これは動的に作成された UI も含まれます。

UI 要素のインスタンス化

UI 要素のプレハブはインスタンス化メソッドを使用して通常どおりにインスタンス化されます。インスタンス化された UI 要素の親を設定する場合、worldPositionStays パラメーターを false に設定した Transform.SetParent メソッドを使用して行うことをお勧めします。

UI 要素の配置

UI 要素は通常、その Rect トランスフォームを用いて配置されます。UI 要素がレイアウトグループの子である場合は、自動的に配置され、位置を決めるステップを省略することができます。

Rect トランスフォームの位置決めをするとき、それは最初に任意のストレッチング動作をするかしないかを判断するために便利です。anchorMin と anchorMax のプロパティが同一でないとき、ストレッチ動作が起こります。

ストレッチングしていない Rect トランスフォームの位置は anchoredPosition と sizeDelta のプロパティがもっとも簡単に設定されています。anchoredPosition はアンカーにピボットの位置を指定します。まったく伸びがないときのサイズと sizeDelta のサイズはちょうど同じです。

ストレッチング Rect トランスフォームのために offsetMin と offsetMax プロパティを使用して位置を簡単に設定できます。offsetMin プロパティは、左下のアンカーに RECT と相対的に左下隅の角を指定します。offsetMax プロパティは、右上のアンカーに RECT と相対的に右上隅の角を指定します。

UI 要素のカスタマイズ

動的に複数の UI 要素をインスタンス化している場合、それらすべてが同じように見えるようにしたい、同じことを行いたいと思うでしょう。それはメニューにあるボタン、インベントリ内のアイテム、または何か他のものかどうかにかかわらず、個々のアイテムが別のテキストまたは画像を持ってきたり、相互作用したときに別のことを行ったりすることを望むでしょう。

これはさまざまなコンポーネントを取得し、それらのプロパティを変更させることによって行われます。スクリプトリファレンスの Image と Text コンポーネントを参照してください。スクリプトから UnityEvent で作業する方法を示しています。

World Space UI の作成
画面遷移の作成