Reading Time: 10 minutes
Checked with: Unity 2021.3.9f1
Данный гайд предназначен для создания вращаемого объекта на сцене. Данный объект возможно вращать вокруг оси. Примеры: дверь, крышка сундука, руль.
Для создания крышки сундука нам потребуется создать/загрузить модель крышки сундука. Чтобы крышка не висела в воздухе - также потребуется модель нижней части сундука.
Создайте пустой объект (Main Menu -> GameObject -> Create Empty
) и переименуйте в ChestExample
.
В объекте ChestExample
создайте Cube
(Main Menu -> GameObject -> 3D Object -> Cube
).
Измените параметры компонента Transform
:
- Position:
X = 0, Y = 1, Z = 0
- Scale:
X = 1, Y = 0.05, Z = 0.5
Переименуйте в CapChest
. Это крышка сундука.
В объекте ChestExample
создайте пустой объект и переименуйте в ChestFrame
. Это остальная часть сундука.
В объекте ChestFrame
разместите пять Cube
и измените им следующие параметры:
Cube:
- Position:
X = 0, Y = 0, Z = 0
- Scale:
X = 1, Y = 0.05, Z = 0.5
Смените имя объекта на Bottom
Cube (1):
- Position:
X = 0.5, Y = 0.5, Z = 0
- Scale:
X = 0.05, Y = 1, Z = 0.5
Смените имя объекта на Right
Cube (2):
- Position:
X = -0.5, Y = 0.5, Z = 0
- Scale:
X = 0.05, Y = 1, Z = 0.5
Смените имя объекта на Left
Cube (3):
- Position:
X = 0, Y = 0.5, Z = -0.25
- Scale:
X = 1, Y = 1, Z = 0.05
Смените имя объекта на Front
Cube (4):
- Position:
X = 0, Y = 0.5, Z = 0.25
- Scale:
X = 1, Y = 1, Z = 0.05
Смените имя объекта на Back
Убедитесь в правильности структуры получившегося сложного объекта, сравнив с результатом на скриншоте:
Откройте Window -> Tilia -> Interactions -> Controllable Creator
.
Данный инструмент автоматически преобразует объект в один из видов контролируемых объектов, добавляя необходимые скрипты/объекты/компоненты. Существует четыре типа:
Linear Joint Drive
- Прямолинейное движение объекта от точки до точки. Использует физичеcкое взаимодействие Rigidbody.Linear Transform Drive
- Прямолинейное движение объекта от точки до точки. Kinematic.Angular Joint Drive
- Вращательное движение объекта вокруг оси. Использует физичеcкое взаимодействие Rigidbody.Angular Transform Drive
- Вращательное движение объекта вокруг оси. Kinematic.
Выберите тип Angular Joint Drive
.
Выберите объект CapChest
и нажмите на кнопку Convert
.
Измените параметры у компонента Angular Drive Facade
объекта Interactions.AngularJointDrive_CapChest
Параметры ниже изменяют поведение контролируемого объекта.
Drive Axis
- Ось поворота объекта (X
,Y
илиZ
).Drive Speed
- Скорость поворота. Чем выше, тем меньше движений рукой надо сделать, чтобы повернуть объект.Ungrabbed Drag
- Трение при свободном движении.Grabbed Drag
- Трение при движении с захватом рукой.Start At Initial Target Value
- Начинать с определенного начального положения.Initial Target Value
- Значения начального положения (0 и 1 - крайние положения).Move To Target Value
- Двигать объект в определенное положение (работает только в режимеPlay
).Target Value
- Определенное положение для предыдущего параметра.(работает только в режимеPlay
).Step Range
- Разбивает на части весь путь движения объекта от мин до макс.Step Increment
- Трение при движении с захватом рукой.Snap To Step to Release
- При свободном движении не продолжает двигаться по инерции, а доходит до точек(Step
), указанных в двух предыдущих параметрах.Drive Limit
- Ограничение поворота объекта в градусах.Hinge Location
- Координаты оси поворота относительно якоря объекта (Attach Point
).Gizmo Line Distance
- Ось поворота отображается линией в редакторе. Длина оси.Gizmo Sphere Radius
- Размер сфер на концах оси.
Получившийся объект имеет одну проблему. Так как он может физически взаимодействовать с другими объектами, то крышка взаимодействует с остальным сундуком и не может повернуться.
Чтобы решить отключить взаимодействие коллайдеров крышки и сундука, необходимо использовать готовый объект CollisionIgnorer
.
Создайте объект Main Menu -> GameObject -> Tilia -> Prefabs -> Mutators -> Mutators.CollisionIgnorer
.
В параметры перенесите объекты ChestFrame
и Interactions.AngularJointDrive_CapChest
.
Нажмите на Play
.
Переместите контроллер к крышке сундука так, чтобы ее коснуться.
Зажмите ЛКМ
(Left_Trigger
), чтобы схватить объект левым контроллером, ПКМ
(Right_Trigger
) - правым.
Не отпуская клавишу, отведите контроллер в сторону. Сундук открылся!