Теперь, когда вы освоились в Roblox Studio и познакомились с основами Lua, пришло время погрузиться в основные концепции написания сценариев для Roblox. В этой главе мы научимся создавать и изменять объекты, реагировать на события и использовать встроенные службы Roblox для управления игрой.
**3.1 Создание и манипулирование объектами**
В Roblox все, что вы видите в игровом мире, является объектами. Сценарии позволяют вам не только изменять существующие объекты, но и создавать новые "на лету".
**3.1.1 Создание объектов:**
Для создания объектов используется функция `Instance.new()`. Она принимает один аргумент – строку, представляющую имя класса создаваемого объекта. Например, чтобы создать новую деталь (Part), нужно использовать следующий код:
```lua
local newPart = Instance.new("Part")
```
После создания объекта, его необходимо разместить в игровом мире. Для этого нужно установить его свойство `Parent` (Родитель) равным другому объекту, уже находящемуся в иерархии. Чаще всего объекты размещаются в `Workspace`:
```lua
newPart.Parent = game.Workspace
```
**3.1.2 Манипулирование объектами:**
После создания объекта, вы можете изменять его свойства, такие как размер, цвет, положение и другие. Для доступа к свойству объекта используется оператор точка (`.`).
```lua
–– Изменение свойств детали
newPart.Name = "MyNewPart"
newPart.Size = Vector3.new(5, 2, 10) – Устанавливает размер детали
newPart.BrickColor = BrickColor.new("Bright blue") – Устанавливает цвет
newPart.Position = Vector3.new(0, 5, 0) – Устанавливает позицию
newPart.Anchored = true – Фиксирует деталь на месте, чтобы она не падала
newPart.CanCollide = false – Отключает столкновения с деталью
```
`Vector3` – это тип данных, представляющий трехмерный вектор. Он используется для задания размера, позиции, поворота и других свойств, связанных с трехмерным пространством.
**3.1.3 Удаление объектов:**
Для удаления объекта используется метод `:Destroy()`.
```lua
newPart:Destroy()
```
**3.2 Работа с событиями и функциями**
**События** – это сигналы, которые объект посылает при наступлении определенных условий. Например, событие `Touched` (Касание) возникает, когда одна деталь касается другой. Сценарии могут "слушать" эти события и выполнять код в ответ на них.
Для подключения функции к событию используется метод `:Connect()`.
```lua
local part = game.Workspace.MyPart – Предположим, что в Workspace уже есть деталь с именем MyPart
function onTouched(otherPart)
print(otherPart.Name .. " коснулся MyPart!")
otherPart.BrickColor = BrickColor.new("Bright red")
end
part.Touched:Connect(onTouched) – Подключаем функцию onTouched к событию Touched детали part
```
В этом примере функция `onTouched` будет вызываться каждый раз, когда какая-либо деталь касается `part`. Параметр `otherPart` передается событием и содержит ссылку на деталь, которая коснулась `part`.
**Функции** позволяют вам организовать код и выполнять определенные действия по команде. Они также могут принимать аргументы и возвращать значения, что делает их очень гибкими.
**3.3 Использование служб Roblox**
Службы Roblox предоставляют доступ к различным функциям платформы. Вы уже знакомы с `Workspace` – это тоже служба, которая содержит все объекты игрового мира. Давайте рассмотрим еще несколько важных служб: