Сочленения (Joints)
С помощью компонента Joint , вы можете добавить один rigidbody объект к другому или к фиксированной точке в пространстве. Обычно вы желаете, чтобы у сочленения была хоть какая-то свобода движения, так что Unity предоставляет различные Joint компоненты, реализующие разные ограничения. Например, Hinge Joint позволяет осуществлять вращение вокруг заданной точки и оси, в то время как Spring Joint держит объекты раздельно, но расстояние между ними может немного пружинить. Как обычно, названия 2D компонентов оканчиваются на 2D, например, Hinge Joint 2D.
For example, a Hinge Joint allows rotation around a specific point and axis while a Spring Joint keeps the objects apart but lets the distance between them stretch slightly.
2D joint components have 2D at the end of the name, eg, Hinge Joint 2D. See Joints 2D for a summary of the 2D joints and useful background information.
У сочленений также есть другие опции, которые можно включить для различных эффектов. Например, вы можете настроить сочленение так, чтобы оно разрывалось при применении к нему силы больше заданного порога. Некоторые сочленения также позволяют возникать движущей силе ( drive force ) между соединёнными объектами для автоматического приведения их в движение.
Дополнительную информацию о свойствах сочленений вы можете найти на страницах справки по соответствующим компонентам.
Стыковка объектов на сцене в Unity
возникла проблема по которой я не могу никак найти решений. Есть ли какие-то способы стыковать кабель-канал друг с другом, даже если человек чуть чуть не довел его до нужной позиции? 
В данный момент нет никакой автоматической стыковки, и человеку приходится долго вручную прицеливаться
Если это происходит в редакторе во время редактирования сцены, то можно использовать привязку по вертексам. Двигаешь объект, удерживая ctrl+v или cmd+v(если mac). Тогда unity будет пытаться с минимальным расстоянием прилепить двигаемый объект, ближайший его вертекс, к ближайшему вертексу соседнего объекта.
Оптимизация приложения путем объединения идентичных объектов
Решил поделиться с вами одним очень важным знанием об оптимизации приложения или игры (далее просто приложение), создаваемого на движке Unity3D.
Проблема оптимизации имеет более острую актуальность при разработки приложений для мобильных платформ — iOS, Android и в перспективе Windows Phone. Так как ресурсы там весьма ограничены, особенно, если Вы планируете поддержку более старых версий ОС, которые используются на старых аппаратах, которые в свою очередь имеют еще более скудное железо.
Конечным показателем качества оптимизации принято считать параметр FPS — это аббревиатура от английских слов «frames per second», что в переводе на русский означает «количество кадров за секунду». То есть, чем лучше приложение оптимизировано, тем больше кадров в секунду оно может показать.
Что же влияет на время отрисовки одного кадра?
Это время определяют три фактора: время работы процессора (работа наших скриптов), время работы графического ускорителя (наши модели, шейдеры) и программное ограничение кол-ва кадров. Последнее, к слову говоря, можно смело ставить на 30-40, человеческий глаз все равно больше не увидит, а батарейку в телефоне это сэкономит, особенно если графика в игре простая.
Сделать это можно при помощи одной строчки:
Но это отдельная тема, а поговорим мы с вами о времени работы графического ускорителя.
Ни для кого не секрет, что в игре не стоит использовать большого кол-ва полигонов, текстур с большим разрешением, большого кол-ва источников света, невероятно сложных шейдеров и т.д. Все эти банальности вы можете прочитать в миллионе статей на тысячи форумах о том, как делать игры.
Мы же с вами поговорим о снижении значения параметра Draw Calls. Draw Calls — это своего рода количество заданий для графического чипа для отрисовки одного кадра. Под заданием подразумевается связки «модель + материал», «модель + свет». То есть если в кадре мы имеем 40 моделей, то параметр Draw Calls будет равен 40, если мы добавим в сцену источник света, то Draw Calls вырастит вдвое — 80. Если не понятно, то взгляните на картинку:
Зависимость на лицо — Растет Draw Calls, FPS падает.
Решить эту проблему можно просто — изначально делать модель сцены монолитной с одной большой текстурой. Но тогда возникает проблема роста занимаемой памяти, и чтобы что-либо исправить придется постоянно возвращаться в редактор. Однако есть и другой способ:
Идентичные объект в Unity3d можно объединять в один объект. На изображении сверху 6 кубов объединены в одну сетку, поэтому мы имеем Draw Calls = 2. «1 модель + материал» + «1 модель + свет». Ограничения, которые накладываются на исходные объекты:
1) Объект не должен двигаться, то есть должен быть стационарным.
2) Все объекты должны использовать один и тот же материал.
Сами модели могут быть разные, т.е., например, объединить можно куб, сферу и плоскость.
Теперь давайте рассмотрим, как это делается.
Первое что нужно сделать — создать новый javascript файл. Назовем его «Сombine.js» и заполним следующим кодом:
Коментарии к коду:
При запуске он собирает со всех дочерних объектов мэши, «склеивает» их в один, а потом подключает полученную модель себе в MeshFilter. Материал берет у одного из дочерних объектов и так же применяет его на себя. Рендереры у дочерних объектов он выключает.
Далее необходимо создать пустой объект. Его глобальные координаты должны быть базисными, т.е. положение в начале координат, все оси совпадают, масштаб — единица. Локальные координаты не так важны.
Теперь кладем в этот объект, объекты которые нужно объединять.
И подключаем к этому пустому объекту скрипт Combine. Он так же автоматически подключит MeshRenderer.
Готово! Теперь запустив проект, можно увидеть что наш пустой объект обрел форму и цвет. Так же стоит заметить, что у дочерних объектов сохранились коллайдеры.
Теперь давайте протестируем эту технологию на реальном примере.
В моем проекте Greyhound Racing используется целая куча однообразных статических деревьев и травы. Попробуем сравнить FPS в случае с объединенными моделями и в случае, когда модели разъединены.
Цельный мэш:
Как видите, рост FPS составил примерно 25%, а DrawCalls упал на почти на 40%.
Надеюсь, это окажется полезным для вашего проекта.
Спасибо за внимание!