UnityEngine.UI.VerticalLayoutGroup не располагает объекты по сетке

189
21 апреля 2018, 16:54

Задача - расположить объекты по сетке. Для этого пробовал VerticalLayoutGroup, HorisontalLayoutGroup, GridLayoutGroup.

Проблема заключается в том, что при динамическом добавлении объектов, все эти объекты появляются в нулевых локальных координатах и не распределяются по сетке. Пробовал просто вручную накидывать объекты на сцене - всё работает (кто бы сомневался..)

Итак, код добавления объектов:

public GameObject grid;
void Start () {
        foreach (var item in Resources.LoadAll<GameObject>("prefabs/bodies"))
        {
            GameObject temp = Instantiate(new GameObject(item.GetComponent<Body_variables>().bodyName), grid.transform, false);
            temp.AddComponent<TextMesh>();
            temp.GetComponent<TextMesh>().text = temp.name;
            temp.GetComponent<TextMesh>().fontSize = fontSize;
            bodies.Add(temp);
        }
        foreach (var item in Resources.LoadAll<GameObject>("prefabs/weapons"))
        {
            GameObject temp = Instantiate(new GameObject(item.GetComponent<Weapon_variables>().weaponName), grid.transform, false);
            temp.AddComponent<TextMesh>();
            temp.GetComponent<TextMesh>().text = temp.name;
            temp.GetComponent<TextMesh>().fontSize = fontSize;
            weapons.Add(temp);
        }
    }

В GameObject grid передается объект, содержащий компонент VerticalLayoutGroup Вот он:

Иерархия:

Сам скрипт Висит на MainCamera и в него передается объект Content.

Вот что получается в результате:

Все объекты висят в нулевых координатах. Нагугливание проблемы выдало множество способов решения, попробовал все, ничего не помогло. Вот они прямо по списку:

        grid.GetComponent<VerticalLayoutGroup>().enabled = false;
        grid.GetComponent<VerticalLayoutGroup>().enabled = true;
        Canvas.ForceUpdateCanvases();
        grid.GetComponent<VerticalLayoutGroup>().SetLayoutVertical();
        grid.GetComponent<ContentSizeFitter>().SetLayoutVertical();
        LayoutRebuilder.ForceRebuildLayoutImmediate(grid.transform as RectTransform);

Параметры компонентов пробовал менять, собственно результата ноль. Где я туплю? выручайте (:

Answer 1

Вы используете компонент TextMesh - это 3d текст для сцены, а не интерфейса.
LayoutGroup с ним не работают. Используйте базовый Text.

Если вам нужно какое-то особое оформление текста, можете в ассет сторе скачать TextMeshPro - там у них своя реализация.

И ещё. Делать Canvas дочерним объектом камеры не обязательно - это ничего не даёт. Всё решает Render Mode установленный в компоненте.

И ешё2. Компонент VerticalLayoutGroup нужен для вертикальной сортировки компонентов, для построения сетки есть GridLayoutGroup

READ ALSO
Проблемы с использованием библиотеки MailKit

Проблемы с использованием библиотеки MailKit

Использую библиотеку MailKitВот код

194
Где я могу задать ключи для компиляции в Visual Studio?

Где я могу задать ключи для компиляции в Visual Studio?

Прочитал на хабре, что можно уменьшить время компиляции, за счет ключа параллельной компиляции /MPВ настройках не вижу таких пунктов

242
Проблема ObservableCollection&lt;T&gt; Deserialize

Проблема ObservableCollection<T> Deserialize

Не могу разобраться с проблемой десериализации колекции объектов

177
Не сложная программа для разметки с языком css [требует правки]

Не сложная программа для разметки с языком css [требует правки]

Нужно что-нибудь не сложное по типу Lazarus

234