Roblox · Обби · урок 4

Механизмы: вращение, пружина, маятник

Двигающиеся препятствия без сложных скриптов — на «ограничениях» (Constraints): вращающаяся палка, площадка на пружине и маятник на верёвке.

Структура

Синим — что добавляем на этом уроке.

Workspace
├─ Spinner (Model)
│  ├─ SpinBase (Part) — Anchored вкл.
│  │  ├─ A0 (Attachment)
│  │  └─ Motor (HingeConstraint) — ActuatorType Motor
│  └─ SpinBar (Part) — Anchored выкл.
│     └─ A1 (Attachment)
├─ Trampoline (Model)
│  ├─ SpringBase (Part) — Anchored вкл.
│  │  ├─ Spring (SpringConstraint)
│  │  └─ Slider (PrismaticConstraint)
│  └─ Pad (Part) — Anchored выкл.
│     └─ ResetScript (Script)
└─ Pendulum (Model)
   ├─ PendulumTop (Part) — Anchored вкл.
   │  └─ Rope (RopeConstraint)
   └─ Ball (Part) — Anchored выкл.
      └─ ResetScript (Script)

Шаги

  1. Constraints — «связи» между деталями. Создаются через Model → Create (Constraints), соединяют две Attachment.
  2. Вращение: низкая «SpinBase» (Anchored вкл.) и длинная палка «SpinBar» над ней (Anchored выкл.). Model → Create → Hinge: кликни сначала по верху основания, потом по низу палки.
  3. У Attachment ось вращения — жёлтая стрелка. Поверни обе Attachment так, чтобы стрелки смотрели вверх (Orientation 0, 0, 90).
  4. HingeConstraint: ActuatorType = Motor, AngularVelocity = 1.5 (скорость), MotorMaxTorque = 100000000 — иначе игрок остановит палку. В методичке был CylindricalConstraint — Hinge то же самое, только проще.
  5. Пружина: «SpringBase» (Anchored вкл.) и площадка «Pad» над ней (Anchored выкл.). Model → Create → Spring между ними: Stiffness 2000, FreeLength — расстояние между ними, Damping 50.
  6. Чтобы площадку не уносило вбок — добавь между теми же деталями Prismatic (направляющая). Обе Attachment стрелкой вверх.
  7. Маятник: «PendulumTop» высоко (Anchored вкл.), шар «Ball» сбоку (Anchored выкл., Shape Ball). Model → Create → Rope между ними, Length — чуть больше расстояния. Шар отпущенный сбоку сам начнёт качаться.
  8. Сделай шар тяжёлым: CustomPhysicalProperties вкл., Density 10 — он будет сбивать игроков.
  9. Маятник и пружина со временем останавливаются или сбиваются игроками — «ResetScript» раз в 30 секунд ставит деталь на место без скорости, и всё начинается заново.

Скрипты

ResetScript

Где: Workspace → Pendulum → Ball (и Trampoline → Pad) · Script
Зачем: Возвращает деталь на место.

-- маятник или площадка пружины
local part = script.Parent
-- раз в сколько секунд возвращаем на место
local RESET_TIME = 30
-- место и поворот в начале игры
local start = part.CFrame

-- бесконечно
while true do
    -- ждём
    task.wait(RESET_TIME)
    -- гасим скорость
    part.AssemblyLinearVelocity = Vector3.zero
    -- гасим вращение
    part.AssemblyAngularVelocity = Vector3.zero
    -- ставим на старое место — маятник снова раскачивается
    part.CFrame = start
-- конец цикла
end

Проверка

Запусти Play (или Run) и убедись: