Unity: как изменить размер объекта согласно ContentSizeFilter?
Привет всем!
Есть ui-текст. Размер текста меняется. За текстом расположена картинка, которая должна меняться по размеру текста. Так вот, если картинка является дочерней к тексту, то ее размер меняется через ContentSizeFilter, но тогда она перекрывает текст. Если картинку не делать дочерней к тексту, то она не перекрывает текст, но ContentSizeFilter тогда её не масштабирует.
У меня была мысль в методе 1) сделать картинку дочерней к тексту 2)как-то заставить контент сайз обновить размеры контента 3) убрать картинку из дочерних объектов текста. Так вот, с пунктом 2 проблема, не нашёл метода в ContentSizeFilter который обновлялся бы размеры дочерних объектов. Такой метод существует? Есть ещё варианты решения проблемы?
#1
15:21, 30 авг 2017
Задать картинки (как дочерний элемент текста) в Anchors у RectTransform как min = [0;0] и max = [1;1] ?
#2
15:40, 30 авг 2017
Пробовал, у меня так и сделано + картинка растягивается во весь размер родителя если она дочерняя к тексту. Тут нужно ещё позицию и width и height задавать.
#3
16:20, 30 авг 2017
Правка
к картинке ContentSizeFitter и VerticalLayoutGroup и флажки Сontrol Сhild Size
#4
0:48, 31 авг 2017
shda
Спасибо, помогло.
Прошло более 3 лет
- padavan123
- Пользователь
#5
10:59, 12 июня 2021
Второй пункт делается через корутину, с небольшой задержкой:
using TMPro; public TextMeshPro Text_Mesh; void Start () < // Добавить ContentSizeFitter Text_Mesh.gameObject.AddComponent().horizontalFit = UnityEngine.UI.ContentSizeFitter.FitMode.PreferredSize; Text_Mesh.gameObject.GetComponent().verticalFit = UnityEngine.UI.ContentSizeFitter.FitMode.PreferredSize; StartCoroutine (ChangedSize ()); > IEnumerator ChangedSize() < yield return new WaitForSeconds (0.0001f); print (Text_Mesh.GetComponent().sizeDelta); >
Как увеличивать размер объекта? unity3d
Нужно через код увеличивать anchors у Rect Transform на заданное число. Например: был max Y = 1, стал 1.1 Как это можно реализовать?
Отслеживать
задан 21 июн 2018 в 19:57
89 1 1 серебряный знак 11 11 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
GetComponent().anchorMax = new Vector2(x, y); GetComponent().anchorMin = new Vector2(x, y);
Отмечу, что anchors не увеличивает и не уменьшает размер объекта (как Вы хотите в заголовке топика), а указывает точки привязки объекта к родительскому.
Отслеживать
ответ дан 21 июн 2018 в 20:07
2,280 2 2 золотых знака 17 17 серебряных знаков 30 30 бронзовых знаков
А как сделать так, чтобы при изменении размеров anchorMin у объекта, дочерний объект сохранял свои позиции, относительно экрана.
21 июн 2018 в 20:41
@DmitryDAN, по идее, если Вы в рантайме меняете anchor (якорь), родительский и дочерний объекты должны остаться на месте. Якоря нужны для позиционирования объектов (например интерфейса) относительно экрана для разных разрешений дисплеев и, как правило, задаются только в инспекторе редактора.
21 июн 2018 в 20:47
Вот:recordit.co/tdYTiXhWFi Меняю размер «Content» на 1, после чего «GameObject» расплющивает.
21 июн 2018 в 20:51
@DmitryDAN, в том и дело, что расплющивает. Заметьте, до запуска проекта, Content у Вас имеет правильную привязку к углам. После манипуляций верхние якоря «цепляются» за пустоту, что крайне не хорошо и в дальнейшем может потрепать нервы. Если Вам надо изменять размеры объекта в режиме привязки, используйте GetComponent
Как изменить размер объекта, при переносе в другую сцену?
Есть меню кастомизации персонажа, как вы уже наверное поняли, нужно чтобы все изменения кастомизации сохранились, перенести этот же объект непосредственно в сцену с самой игрой, для этого используется самая простая функция DontDestroyOnLoad, скрипт точно такой же как тут: docs.unity3d.com/ScriptReference/Object.DontDestro.
Проблема заключается в том, что персонаж слишком большой в другой сцене, какие изменения нужно внести в скрипт, чтобы перенести его, но уже в маленьком размере?
P.S: Еще я добавил персонажу камеру в меню кастомизации и отключил ее, опять же, что нужно вписать в скрипт, чтобы при переносе объекта в следующую сцену, она включилась?
- Вопрос задан более трёх лет назад
- 2442 просмотра
Комментировать
Решения вопроса 1

Denis Gaydak @MrMureno Куратор тега Unity
VR for all
Самый очевидно простой вариант — соблюсти одинаковый scale в обоих сценах (и в будущем проблем так меньше будет)
А если через скрипт, то «подгонять» скеил ручками.
https://docs.unity3d.com/ScriptReference/Transform.
void Example()
вообще я так понял вы ищете что-то вроде
https://docs.unity3d.com/ScriptReference/MonoBehav.
чтобы определить что вы попали в другую сцену?!
А про камеру — ссылку на неё сохранить(на gameobject) и просто SetActive(bool f);
public class ExampleClass : MonoBehaviour < //назначить в редакторе или в Awake() методе найти главную камеру //сам факт получить ссылку на камеру public GameObject cameraGO; void OnLevelWasLoaded(int level) < if (level == 13)//номер уровня или проверку по имени сделать > >
И немного занудства. По хорошему вся эта кастомизация объекта должна сохраняться и описываться какой-нибудь структурой.
В духе -> Список Деталей, а у каждой детали, Размер,Цвет и Прочность.
Чтобы не через неразрушаемый объект переносить, а сохранив и передав , описывающую такую структуру, можно было восстановить кастомизированный вид.
Появиться возможность как минимум сохранить два , три ,четыре вида кастомизации.
(я так понял вы вроде тридэшник и надеюсь понятно в общих чертах рассказал)
Ну а после уже и патерны-шматерны можете примастыривать.
3 — Игровые объекты (Game Objects) Unity
— создаём новую сцену, попутно изучив все пункты меню, предназначенные для работы со сценой: создать (File -> New Scene), открыть (File -> Open Scene), сохранить (File -> Save), сохранить как… (File -> Save as…)
— учимся удалять объекты со сцены с помощью клавиши Delete
— изучаем использование комбинации клавиш Ctrl + Z для отмены выполненных действий
— знакомимся с понятием «игровой объект» (Game Object) и учимся добавлять их на сцену с помощью пункта меню GameObject -> 3D object -> …
— учимся переименовывать объекты
— учимся различать координатные оси X (красного цвета), Y (зеленого – это вертикальная ось в Unity), Z (синего)
— на примере 3D-примитива Cube учимся перемещать объекты на сцене (инструмент Move tool),
— знакомимся с горячими клавишами для быстрого выбора инструментов управления игровыми объектами: Q (Hand tool), W (Move tool), E (Rotate tool), R (Scale tool), T, Y
— учимся перемещать объекты по сцене по отдельным координатным осям X, Y, Z и в пределах координатных плоскостей (X, Z), (X, Y), (Y, Z)
— учимся поворачивать (Rotate tool, клавиша E) игровой объект вокруг соответствующих координатных осей,
— используем комбинацию клавиш Ctrl + Z для отмены выполненных действий. Особенность Unity в том, что запоминаются все мельчайшие действия, включая выделения объектов и пр. без изменения их характеристик. Поэтому иногда нажимать Ctrl + Z приходится долго.
— знакомимся с командой Redo и соответствующей комбинацией клавиш Ctrl + Y для возврата отмененных действий.
— находим команды Undo (Ctrl + Z) и Redo (Ctrl + Y) в пункте Edit главного меню редактора Unity, учимся находить и запоминать комбинации клавиш.
— учимся масштабировать (изменять размеры) игровых объектов (Scale tool, горячая клавиша R) пропорционально (по всем осям одновременно, без изменения формы объекта) и по отдельным осям, изменяя форму (пропорции) исходного объекта.
— знакомимся с инструментом Rect tool, который в основном используется для работы с 2D-объектами, но работает также и в 3D, позволяя изменить размер объекта в одном направлении, а также переместить его в пространстве сцены.
— знакомимся с инструментом Move, Rotate, Scale tool, в котором одновременно совмещены все три перечисленные инструмента в одном. Этот инструмент появился в более новых версиях Unity.
— вырабатываем привычку идентифицировать (именовать) создаваемые на сцене объекты либо в окне Inspector, либо Hierarchy.
— учимся сохранять сцену в нужной папке, ориентируясь на наличие знака * рядом с её названием в окне Hierarchy либо в заголовке окна редактора Unity.
— учимся ориентироваться в папках в окне Project, находить там и открывать сохранённые сцены.
Цикл уроков создан при поддержке компании Melsoft games.
Проекты

Творческое программирование для всех! (игры и анимация на Scratch)
Бесплатные уроки для детей и взрослых
- Контакты
- Ольга Елисеева — Автор учебников, наставник, тренер, консультант
- О проекте АЭЛИТ
- Публичная оферта
- Политика конфиденциальности
- Пользовательское соглашение
- Публичная лицензия на электронные версии книг