1

これは非常に簡単な作業だと思っていましたが、今では何時間も試してみましたが、これを回避する方法がわかりません。

スクロール可能なリストに表示する必要がある友人のリストがあります。各友人にはプロフィール画像と名前が関連付けられているため、リスト内の各項目には画像と名前が表示されます。

問題は、画像と名前ラベルの両方を含む柔軟なコンテナーを作成する方法がわからないことです。幅と高さを動的に変更して、画像とテキストがそれに応じて拡大縮小および移動できるようにしたいと考えています。

Unity 5 と Unity UI を使用しています。

コンテナに対して次のことを達成したい:

  • コンテナの幅と高さは柔軟にする必要があります
  • 画像はコンテナの子であり、左揃えにする必要があります。高さはコンテナの高さを埋め、縦横比を維持する必要があります。
  • name ラベルは contianer の子であり、15 ピクセルの左パディングで画像に左揃えにする必要があります。テキストの幅は、コンテナー内の残りのスペースを埋める必要があります。

これが次の添付画像によく示されていることを願っています。

ここに画像の説明を入力

Unity Answers で同じ質問をしましたが、今のところ回答がありません。このような単純なタスクが、コードを使用しないと Unity UI で実行できない可能性は本当にあるのでしょうか?

お時間をありがとうございました!

4

2 に答える 2

0

レイアウトコンポーネントで実現できるようです。

画像はコンテナの子であり、左揃えにする必要があります。高さはコンテナの高さを埋め、縦横比を維持する必要があります。

このために、アスペクトモードでアスペクト比フィッターコンポーネントを追加してみてください - 幅コントロール高さ

ここに画像の説明を入力

name ラベルはコンテナーの子であり、15 ピクセルの左パディングで画像に左揃えにする必要があります。テキストの幅は、コンテナー内の残りのスペースを埋める必要があります。

このためには、ラベルをコンテナーのサイズに固定してストレッチし、テキスト コンポーネントで BestFit オプションを使用するだけです。

ここに画像の説明を入力

于 2015-06-03T12:44:39.230 に答える
0

コードなしでこれを行う方法は見つかりませんでした。このような単純なタスクが現在の UI システムで実行できないことに非常に不満を感じています。このトリックを実行する次のレイアウト スクリプトを作成しました (助けてくれた Angry Ant に感謝します)。スクリプトはテキスト ラベルに添付されます。

using UnityEngine;
using UnityEngine.EventSystems;

[RequireComponent (typeof (RectTransform))]
public class IndentByHeightFitter : UIBehaviour,        UnityEngine.UI.ILayoutSelfController
{
public enum Edge
{
    Left,
    Right
}

[SerializeField] Edge m_Edge = Edge.Left;
[SerializeField] float border;

public virtual void SetLayoutHorizontal ()
{
    UpdateRect ();
}


public virtual void SetLayoutVertical() {}

#if UNITY_EDITOR
protected override void OnValidate ()
{
    UpdateRect ();
}
#endif


protected override void OnRectTransformDimensionsChange ()
{
    UpdateRect ();
}


Vector2 GetParentSize ()
{
    RectTransform parent = transform.parent as RectTransform;

    return parent == null ? Vector2.zero : parent.rect.size;
}


RectTransform.Edge IndentEdgeToRectEdge (Edge edge)
{
    return edge == Edge.Left ? RectTransform.Edge.Left : RectTransform.Edge.Right;
}


void UpdateRect ()
{
    RectTransform rect = (RectTransform)transform;
    Vector2 parentSize = GetParentSize ();

    rect.SetInsetAndSizeFromParentEdge (IndentEdgeToRectEdge (m_Edge), parentSize.y + border, parentSize.x - parentSize.y);
}
}
于 2015-11-11T08:42:09.923 に答える