Перейти к содержимому

Как изменить размер объекта в unity

  • автор:

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().offsetMin/Max либо уж изменяйте transform.localscale объекта.

Как изменить размер объекта, при переносе в другую сцену?

Есть меню кастомизации персонажа, как вы уже наверное поняли, нужно чтобы все изменения кастомизации сохранились, перенести этот же объект непосредственно в сцену с самой игрой, для этого используется самая простая функция DontDestroyOnLoad, скрипт точно такой же как тут: docs.unity3d.com/ScriptReference/Object.DontDestro.

Проблема заключается в том, что персонаж слишком большой в другой сцене, какие изменения нужно внести в скрипт, чтобы перенести его, но уже в маленьком размере?

P.S: Еще я добавил персонажу камеру в меню кастомизации и отключил ее, опять же, что нужно вписать в скрипт, чтобы при переносе объекта в следующую сцену, она включилась?

  • Вопрос задан более трёх лет назад
  • 2442 просмотра

Комментировать
Решения вопроса 1

MrMureno

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)

Творческое программирование для всех! (игры и анимация на Scratch)
Бесплатные уроки для детей и взрослых

  • Контакты
  • Ольга Елисеева — Автор учебников, наставник, тренер, консультант
  • О проекте АЭЛИТ
  • Публичная оферта
  • Политика конфиденциальности
  • Пользовательское соглашение
  • Публичная лицензия на электронные версии книг

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *