Хорошо. Давайте начнем с кода из этого форума форума 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>()) {
Теперь мы используем меньше из двух значений ширины. Тогда применить его к макету контента:
}
widest = Mathf.Min(maxWidth, widest);
_inputMines.GetComponent<LayoutElement>().preferredWidth = widest + 40;
+40
следует сохранить, потому что имеет дело с скроллинга. Для этого необходимо выбрать значение maxWidth.
Наконец-то мы хотим, чтобы более длинные предметы были отрезаны красиво.
Дайте каждому выпадающему объекту 2D-компонент Rect Mask (Component -> UI -> Rect Mask 2D). Объект шаблона существует в иерархии сцены до запуска игры, просто отключен. Вы можете просто добавить компонент в родительское преобразование, то есть с изображением (так что текст обрезается).
Вам необходимо убедиться, что маска покрывает ту же ширину, что и графическая картинка, и расширяется вместе с ней, возможно, немного короче по направлению X, поэтому текст обрезается до рисования границы изображения. Это должно происходить автоматически, но вам нужно будет проверить и, возможно, внести некоторые изменения в объект шаблона. В качестве альтернативы вы можете использовать маску изображений, но вам придется играть с ней самостоятельно, но это позволит непрямоугольную обрезку.
Вот и все!