Выбор игровых объектов
Вы можете выбрать один GameObject основной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь в Вид сцены Интерактивный вид мира, который вы создаете. Вы используете Scene View для выбора и размещения пейзажей, персонажей, камер, источников света и всех других типов игровых объектов. Подробнее
См. в Словарь или в окне Иерархия . Вы также можете выбрать несколько игровых объектов одновременно.
Unity выделяет выбранные игровые объекты и их дочерние элементы в представлении «Сцена». По умолчанию цвет контура выделения — оранжевый, а цвет дочернего контура — синий. Вы также можете выделить каркасы выбранных игровых объектов другим цветом. Вы можете изменить все эти цвета выделения контура в настройках Unity (Unity > Preferences в macOS или Edit > Preferences в Windows).
Для получения дополнительной информации о визуализации выбора контура и каркаса см. документацию по меню Gizmos.
Выбор игровых объектов
Чтобы выбрать один игровой объект, выберите один из следующих способов:
Нажмите на него в виде сцены. Если вы несколько раз нажмете на общее пространство между перекрывающимися игровыми объектами, выбор будет циклически переключаться между ними.
Нажмите на его имя в окне Hierarchy.
Чтобы выбрать или отменить выбор нескольких игровых объектов, выберите один из следующих способов:
Перетащите прямоугольник вокруг нескольких игровых объектов. Unity выбирает все, что попадает в эту ограничивающую рамку.
Удерживая нажатой клавишу Shift, щелкайте игровые объекты в Сцене Сцена содержит среду и меню. вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь . Вы также можете использовать клавишу Ctrl (Windows) или Command (macOS), чтобы добавлять или удалять игровые объекты из списка.
Примечание. Когда в редакторе для выполнения действия требуется один выбранный игровой объект, он ищет «активный» объект. Например, Unity должна решить, какой GameObject использовать в качестве опорного для инструментов преобразования в режиме Pivot. По умолчанию Unity считает первый выбранный вами GameObject активным. И каждый раз, когда вы Shift+щелкаете по одному из нескольких выбранных игровых объектов, вы меняете, какой из них активен. Когда GameObject активен в представлении «Сцена», Unity не отображает никаких видимых признаков того, что он активен. Однако вы можете увидеть, какой игровой объект активен в представлении «Сцена», если несколько раз щелкнуть мышью, удерживая клавишу Shift, в поворотном режиме с несколькими выбранными объектами.
Однако, если вы работаете с большой сценой, содержащей множество элементов сцены (таких как игровые объекты, объекты ландшафта, камеры и источники света), выбор нескольких объектов может быть очень сложным. Чтобы помочь вам выбрать только нужные элементы, вы можете заблокировать выделение некоторых объектов с помощью элементов управления выбором сцены.
Элементы управления выбором сцены
Вы можете включать и выключать элементы управления выбором сцены, чтобы отметить, какие элементы можно выбрать при работе в редакторе. По умолчанию все элементы доступны для выбора, но вы можете выбрать, какие элементы сцены Unity пропускает при добавлении к выбору при нажатии на них. Например, если вы работаете с большой сценой с более чем 10 000 объектов, вы можете временно заблокировать выбор определенных игровых объектов, чтобы предотвратить случайное редактирование.
После того как вы помечаете элемент как недоступный для выбора, Unity продолжает отображать его, даже если вы больше не можете выбирать или редактировать его в представлении «Сцена». Состояние возможности выбора сохраняется только в редакторе и только для пользователя в проекте, где оно было установлено. Изменение состояния выбора не «загрязняет» сцену (то есть не считается модификацией).
Элементы управления выбором сцены очень похожи на элементы управления видимость сцены.
Переключение выбора
Вы можете управлять возможностью выбора сцены для отдельных игровых объектов в окне Hierarchy.
У каждого игрового объекта есть значок/переключатель выбора сцены.
Чтобы переключить возможность выбора сцены:
Щелкните значок выбора игрового объекта в окне Hierarchy, чтобы включить или отключить выбор игрового объекта и его дочерних элементов.
Переключение возможности выбора для GameObject и его дочерних объектов влияет на все дочерние GameObject, от «целевого» GameObject до самого низа иерархии.
Alt + щелкните значок возможности выбора игрового объекта в окне иерархии, чтобы включить или отключить выбор только игрового объекта.
Переключение выбора для одного игрового объекта не влияет на его дочерние элементы. Они сохраняют прежний статус выбора.
Поскольку вы можете переключать возможность выбора для всей ветки или отдельного игрового объекта, вы можете получить игровые объекты, которые можно выбрать, но у которых есть дочерние или родительские элементы, которых вы не можете выбрать. Чтобы помочь вам отслеживать, что происходит, значок возможности выбора меняется, чтобы указать статус каждого игрового объекта.
Unity выбирает элементы, которые можно выбрать, только когда вы рисуете ограничивающую рамку выбора в представлении «Сцена».
| A | ![]() |
Вы можете выбрать GameObject, но не можете выбрать некоторые из его дочерних элементов.. |
| B | ![]() |
Вы не можете выбрать GameObject, но можете выбрать некоторые из его дочерних элементов.. |
| C | ![]() |
You can pick the GameObject and its children. This icon only appears when you hover over the GameObject. |
| D | ![]() |
Вы не можете выбрать GameObject или его дочерние элементы. |
Любые изменения выбора сцены, сделанные вами в окне «Иерархия», сохраняются. Unity повторно применяет их всякий раз, когда вы используете Select All или Deselect All, закрываете и снова открываете сцену и т. д.
§ 67. Работа с объектами
Построение трёхмерных моделей обычно начинается с примитивов — простейших объектов. К ним относятся плоскость (точнее, её прямоугольная часть), куб, сфера, цилиндр, конус, тор и некоторые другие (рис. 9.4).

При создании объекта ему автоматически присваивается имя. Например, первый куб будет называться Cube, второй — Cube.001 и т. д. Это имя можно изменить на панели свойств объекта, которая расположена в правой части окна программы Blender . (рис. 9.5)

Выделение объектов
Для того чтобы работать с объектом, например изменять его свойства, предварительно нужно выделить его. В программе Blender для этого используется правая кнопка мыши (а не левая, как в других программах).
При нажатой клавише Shift можно выделить правой кнопкой мыши несколько объектов одновременно. Если повторно щёлкнуть на объекте, выделение снимается.
С помощью клавиши А (от англ. all — всё) снимается выделение со всех объектов, а если ни один объект не был выделен, все они выделяются.
После нажатия клавиши В (от англ. border select — выделить рамкой) можно с помощью мыши обвести прямоугольной рамкой все объекты, которые нужно выделить. Если объект хотя бы частично попал в рамку, он будет выделен. Кроме того, можно нажать левую кнопку мыши и, удерживая нажатой клавишу Ctrl, «обвести» все нужные объекты произвольным контуром.
Для мелких объектов удобно использовать круговое выделение. Этот инструмент включается при нажатии клавиши С: появляется окружность, размер которой регулируется колесиком мыши. Затем щелчком (или «протаскиванием») левой кнопкой мыши выделяются все элементы, попадающие внутрь окружности. Если в этом режиме случайно выделен лишний объект, выделение можно снять, нажав на колесико мыши.
Существуют и другие, более сложные способы выделения объектов, которые доступны через меню Select.
С помощью клавиши Num. (точка на цифровой клавиатуре) можно приблизить выделенный объект, а клавиша Num/ временно скрывает остальные объекты (кроме выделенных).
Преобразования объектов
Любой объект можно перемещать, вращать и масштабировать (изменять размеры). Эти операции называются преобразованиями объектов или трансформациями (англ. transformations).
В опорной точке (англ. origin — начало координат) выделенного объекта появляется так называемый манипулятор с тремя стрелками, параллельными осям координат (рис. 9.6) Ось Z (синяя стрелка в Blender) направлена вверх, а оси X (красная стрелка в Blender) и Y (зелёная стрелка в Blender) находятся в горизонтальной плоскости.
За эти стрелки объект можно перетаскивать левой кнопкой мыши, меняя его положение только по одной выбранной оси. Центральный круг дает возможность произвольно перемещать объект в плоскости проекции.
Объекты можно вращать как в плоскости проекции (нажав клавишу R, от англ. rotate — вращение ), так и вокруг одной выбранной оси (для этого после нажатия клавиши R нужно нажать клавишу с названием оси — X, Y или Z). Можно использовать специальный манипулятор вращения, позволяющий вращать фигуру за выделенные части окружностей (рис. 9.7)

Чтобы изменить размеры объекта, нужно нажать клавишу S (от англ. scale — изменить масштаб) и перемещать мышь. Чтобы изменять размер только по одной из осей, нужно после нажатия клавиши S нажать клавишу с названием оси. Манипулятор изменения размеров содержит небольшие кубики на концах указателей осей (см. рис. 9.7). Перетаскивая один из них, можно менять соответствующий размер. 
Координаты, углы поворота и размеры объектов можно задавать с клавиатуры в числовой форме. В программе Blender для этого используют панель Преобразование (Transform) — рис. 9.8, которая появляется при нажатии клавиши N. Числовые свойства можно также изменять с помощью мыши (перетаскивая влево и вправо стрелки рядом со значениями).
Копия выделенного объекта создаётся с помощью клавиш Shift+D. Затем объект-копию нужно переместить мышью в нужное место и зафиксировать щелчком левой кнопкой. Если предварительно нажать клавишу X, Y или Z, объект-копия будет перемещаться только вдоль указанной оси.
Удалить выделеннный объект со сцены можно с помощью клавиши Delete.
Системы координат
По умолчанию используется глобальная («мировая») система координат, начало которой находится в точке с координатами (0,0,0) пространства сцены, она не зависит от положения объекта. Иногда бывает удобно перейти к локальной системе координат, которая связана с объектом. Её центр находится в опорной точке объекта, а оси меняют направление при его вращении, показывая, где у объекта «верх» (локальная ось Zлок), «право» (локальная ось Хлок) и т. д. На рисунке 9.9 показаны направления осей глобальной и локальной систем координат для повёрнутого конуса.

В программе Blender можно выбрать нужную в данный момент систему координат с помощью выпадающего списка в нижней части рабочего окна. Именно эти оси будут использоваться при перемещении, вращении и изменении размеров объекта.
Трёхмерная сцена в Blender может состоять из нескольких слоев. В рабочем окне видны только те объекты, которые расположены на активном слое. Активный слой можно выбрать щелчком мышью на специальной панели в нижней части рабочего окна (рис. 9.10).

Всего можно использовать 20 слоев, в данном случае (см. рис. 9.10) какие-то объекты есть на слоях 1, 2 и 4. Активный слой — слой 2, его клетка выделена тёмно-серым фоном. Щёлкая мышью на клетках панели при нажатой клавише Shift, можно сделать активными несколько слоев, чтобы показать все связанные с ними объекты.
Объект может принадлежать не только одному, но и нескольким слоям. Для этого их нужно выделить в аналогичном элементе управления на панели свойств объекта. Здесь же можно перевести объект с одного слоя на другой. Для этих операций можно также использовать всплывающее окно, которое появляется при нажатии клавиши М.
Связывание объектов
Представим себе, что мы построили трёхмерную модель стола, на котором размещены тарелки, чашки и столовые приборы. Теперь нужно передвинуть стол в другое место сцены и немного развернуть его. При этом точно так же должны переместиться и все объекты, стоящие на столе. Чтобы проще решить эту задачу, нужно «привязать» к столу все стоящие на нем предметы, т. е. на панели свойств установить для них так называемый родительский объект (англ. parent — родитель). Можно поступить иначе: выделить, удерживая клавишу Shift, все нужные объекты (тарелки, чашки и т. д.), последним выделить родительский объект (стол) и нажать клавиши Ctrl+P,
После этого при всех преобразованиях объекта-родителя (перемещении, вращении, масштабировании) те же самые преобразования применяются и к объекту-потомку. В то же время объект-потомок по-прежнему можно перемещать независимо от родителя, т. е. мы можем свободно двигать чашку по столу.
Обратите внимание на отличие группы в Blender от аналогичных средств в большинстве программ, работающих с графикой: объекты в такой связанной группе неравноправны — среди них есть один родительский
объект и несколько потомков.
Всю структуру сцены (иерархию объектов) можно посмотреть в специальном окне Структура проекта (Outliner) — рис. 9.11. Здесь видно, например, что объект Cube — родительский для объекта Cube.001.
Справа от имени объекта в окне Структура проекта показаны три значка: щелчок мышью на изображении глаза
скрывает объект; если щёлкнуть на значке
, то объект будет нельзя выделить (иногда это не нужно), а щелчком на значке
можно запретить показ объекта при рендеринге.
Вопросы и задания
Что такое примитивы? Зачем они нужны?
Как вы думаете, зачем каждому объекту сцены присваивается уникальное имя?
Как выделить одновременно несколько объектов?
Какие преобразования объектов вы знаете?
Как можно применить преобразования только по одно
Что такое манипуляторы? Как их использовать?
Какие системы координат применяются при трёхмерном моделирвании? Чем они различаются и когда используются?
Как присвоить каждому объекту в документе уникальный идентификатор?
Я делаю редактор растровых изображений, в котором документ состоит из нескольких слоев, где каждый слой представляет собой растровое изображение. Каждый слой должен иметь уникальный идентификатор по сравнению со всеми другими слоями, которые в настоящее время существуют в документе. Мне также нужно учитывать, что мне нужно сохранять и загружать документы вместе с идентификаторами слоев.
Я использую шаблон команды для хранения действий, которые выполняются с документом, а уникальные идентификаторы используются для отслеживания того, на каком слое должно быть выполнено действие.
На данный момент я просто держу счетчик под названием X, когда создается новый слой, его идентификатор устанавливается на X, а затем X увеличивается. При загрузке мне нужно убедиться, что для X установлено соответствующее число, чтобы новым слоям присваивались уникальные идентификаторы, то есть я мог сохранить значение X и восстановить его или установить X на основе самого большого загруженного идентификатора слоя.
Учитывая, что X — 32-битное число, пользователю нужно будет создать 4 294 967 296 слоев, работающих с одним и тем же файлом, прежде чем идентификаторы начнут повторно использоваться, что вызовет странное поведение. Должен ли я внедрить лучшую систему уникальных идентификаторов или этого в целом достаточно?
Я работаю на Java, поэтому могу использовать библиотеку UUID, которая создает 128-битные уникальные идентификаторы в соответствии со стандартным алгоритмом. Хотя это кажется излишним.
Java создает уникальный идентификатор для каждого экземпляра объекта, используя методы экземпляра вместо методов класса / static
Совершенно новичок в этом, поэтому, надеюсь, у меня есть терминология в правом названии.
Я пытаюсь выяснить, как создать метод экземпляра, который будет выполнять следующие действия:
— возвращается идентификационный номер.
— Как каждый объект создается из конструктора класса (созданного экземпляром?), ему присваивается уникальный идентификатор целочисленного идентификатора. Первый идентификационный номер равен 1, а при создании новых объектов будут назначены последовательные номера.
Я могу найти примеры методов класса/статики, которые делают выше, но я не могу понять, как это сделать с помощью метода экземпляра. Моя попытка ниже:
Мой основной метод заключается в следующем:
Обратите внимание: я не включил весь свой код ради простоты и простоты. Надеюсь, я добавил достаточно.
Я также не хочу использовать java.util.UUID.
4 ответа
Проблема прямо сейчас в том, что ваш «id» является переменной экземпляра, то есть он принадлежит к созданным вами объектам. Подумайте, что каждый раз, когда вы создаете объект, создается новая и новая копия вашей переменной экземпляра. Поэтому каждый раз, когда вы создаете объект, идентификатор сначала устанавливается равным 0, затем пост увеличивается один раз (таким образом, все объекты имеют >
Если вы хотите создать переменную, которая, скажем, автоматически подсчитывает все объекты, созданные вами в классе или имеет идентификатор, вам нужно создать переменную класса. Эти переменные принадлежат всем объектам, созданным вами из класса, а ключевое слово, используемое для этого, — «статическое».
Примечание. Я использовал статическую переменную, но не статический метод. Если вы вообще не хотите использовать статику, это другой вопрос.
Простое изменение ключевого слова сделает вашу программу правильной. Вам не нужно делать слишком много сложных вещей.
Вначале трудно понять концепцию класса и объектов, статические и переменные экземпляра. Дайте мне знать, если вы хотите получить больше объяснений:)



