2017-02-15 6 views
1

私が示すように、コンテンツに合わせて動的にストレッチする必要がありますフィルタパネル上のドロップダウンリストを持っている:ユニティサイズ変更ドロップダウンを動的

enter image description here

私はいくつかのコンテンツサイズフィッターを試してみましたが、何かを見つけることができません、もし可能な限り最大幅を設定してそれより長いものをすべて切り捨てるようにしたいのですが、右のピボットポイントだけを使って右に伸ばしたいと思っています。私はここで似たような例を見つけました:https://forum.unity3d.com/threads/resize-standard-dropdown-to-fit-content-width.400502/

ありがとう!

答えて

0

そのUnityフォーラムスレッドのコードから始めましょう。

var widest = 0f; 
foreach (var item in _inputMines.GetComponentsInChildren<Text>()) { 
    widest = Mathf.Max(item.preferredWidth, widest); 
} 
_inputMines.GetComponent<LayoutElement>().preferredWidth = widest + 40; 

最大幅を許可したいので、これより長いコンテンツは切り捨てられます。それでは、その変数を追加してみましょう。

var maxWidth = 250f; 
//or whatever value; you may wish this to be a property so you can edit it in the inspector 

var widest = 0f; 
foreach (var item in _inputMines.GetComponentsInChildren<Text>()) { 

は、今、私たちは2つの幅の値の小さいを使用しています。 その後コンテンツのレイアウトにそれを適用します。それは、スクロールバーを扱うため

} 
widest = Mathf.Min(maxWidth, widest); 
_inputMines.GetComponent<LayoutElement>().preferredWidth = widest + 40; 

+40が保持されるべきです。これを考慮に入れて、maxWidth値を選択する必要があります。

最後に、長いアイテムをうまくカットしたいと考えています。

各ドロップダウンアイテムにRect Mask 2Dコンポーネント(コンポーネント - > UI - > Rect Mask 2D)を付けます。テンプレートオブジェクトは、ゲームが実行される前にシーン階層に存在し、無効になっています。親トランスフォームにコンポーネントを追加するだけで、イメージを持つトランスフォームを追加することができます(テキストがクリップされます)。

マスクが画像のグラフィックと同じ幅をカバーし、それに沿って拡大するようにする必要があります。画像の境界線が描画される前にテキストが切り取られるように、X方向に少し短くします。これは自動的に行われるはずですが、テンプレートオブジェクトを確認し、場合によってはそれを変更する必要があります。代わりに、画像マスクを使用することもできますが、あなたはそれを自分で演奏しなければなりませんが、非長方形のクリッピングが可能です。

これだけです!

関連する問題