Взаимодействие с игровым миром: обращение к объектам и изменение их свойств через код
Мы уже научились создавать переменные, выполнять математические операции и выводить сообщения в консоль. Это важный фундамент, но давайте будем честны: вы пришли в Roblox не для того, чтобы писать калькуляторы в черном окне консоли. Вы хотите, чтобы мир вокруг оживал.
В этой статье мы перейдем к самой захватывающей части скриптинга — взаимодействию с 3D-миром. Мы научимся писать код, который находит объекты на карте (например, детали, источники света или партиклы) и меняет их свойства в реальном времени. Представьте мост, который становится прозрачным, когда на него наступают, или лампу, меняющую цвет каждую секунду. Всё это делается через изменение свойств объектов.
Иерархия: Древо игры
Чтобы управлять объектом, нужно сначала понять, где он находится. Roblox организован по принципу древовидной иерархии. Это похоже на папки в вашем компьютере или на генеалогическое древо.
!Диаграмма иерархии объектов в Roblox, показывающая путь от корня игры до конкретной детали.
Родители и Потомки (Parents and Children)
В Roblox существуют два ключевых понятия, описывающих отношения между объектами:
Parent (Родитель) — это объект, внутри которого находится наш объект. У каждого объекта может быть только один родитель.
Children (Потомки/Дети) — это объекты, которые находятся внутри нашего объекта. У одного родителя может быть сколько угодно детей.Посмотрите на окно Explorer. Если Part находится внутри Workspace, то:
* Workspace — это Parent для Part.
* Part — это Child для Workspace.
Адресация: Как найти объект через код
Самый главный объект в игре, корень всего дерева, называется game. Чтобы обратиться к любой детали, мы должны проложить к ней «путь», начиная от game, перечисляя имена всех объектов через точку .. Это называется Dot Notation (Точечная нотация).
Представьте, что у вас в Workspace лежит деталь с именем SuperPart.
Путь к ней будет выглядеть так:
game.Workspace.SuperPart
Давайте разберем этот путь:
game — начало пути, вся игра.
.Workspace — мы заходим в сервис Workspace, где лежит физический мир.
.SuperPart — мы находим внутри Workspace конкретную деталь.Пример в коде
Допустим, мы хотим изменить прозрачность этой детали. Мы можем сохранить ссылку на объект в переменную, чтобы не писать длинный путь каждый раз.
> Важно: Имена в скрипте должны точь-в-точь совпадать с именами в окне Explorer. superPart, Superpart и SuperPart — это три разных имени для Luau. Если вы ошибетесь в одной букве, скрипт выдаст ошибку, так как не сможет найти объект.
Изменение свойств (Properties)
Когда мы «схватили» объект и положили ссылку на него в переменную, мы получаем доступ к его свойствам. Вспомните окно Properties: там есть Transparency, Color, Anchored, CanCollide и многое другое. В коде мы обращаемся к ним так же — через точку.
Формула изменения свойства:
Объект.Свойство = НовоеЗначение
1. Прозрачность (Transparency)
Свойство Transparency принимает число от 0 до 1.
* 0 — полностью видимый.
* 1 — полностью невидимый.
* 0.5 — полупрозрачный (как стекло).
2. Закрепление (Anchored)
Свойство Anchored определяет, падает ли деталь под действием гравитации. Это тип данных boolean (истина/ложь).
3. Цвет (Color и BrickColor)
С цветом всё немного сложнее. В Roblox есть два способа задать цвет:
Способ А: BrickColor
Это палитра готовых цветов Roblox (те самые названия вроде "Bright red" или "Really blue").
Способ Б: Color3
Это более профессиональный способ, позволяющий смешивать Красный (Red), Зеленый (Green) и Синий (Blue) каналы. Значения каналов могут быть от 0 до 1 (или от 0 до 255, если использовать специальный конструктор).
> Обратите внимание: свойство называется Color, но значение мы создаем через Color3. Если вы используете BrickColor, то и свойство называется BrickColor.
Относительная адресация: script.Parent
Писать полные пути вроде game.Workspace.PartName не всегда удобно. Что, если вы переименуете деталь? Вам придется переписывать код. Что, если вы скопируете деталь? Скрипт внутри копии всё равно будет искать оригинальную деталь по имени.
Чтобы решить эту проблему, используют относительную адресацию.
Если мы положим наш скрипт внутрь детали (сделаем скрипт потомком детали), мы можем обратиться к этой детали через ключевое слово script.Parent.
script — это ссылка на сам файл скрипта, который выполняется прямо сейчас.
.Parent — это обращение к его родителю.
!Визуализация того, как скрипт, находящийся внутри объекта, ссылается на этот объект через script.Parent.
Пример:
Создайте деталь в Workspace.
Внутри детали создайте Script.
Напишите код:Такой скрипт можно копировать и вставлять в любые другие детали, и он всегда будет работать с той деталью, внутри которой лежит.
Время и ожидание: task.wait()
Компьютер выполняет код невероятно быстро. Если вы напишете скрипт, который меняет цвет детали, это произойдет в тот же момент, когда запустится игра. Вы даже не успеете это заметить.
Чтобы увидеть изменения, нам часто нужно просить скрипт «подождать». Для этого используется команда task.wait(секунды).
Давайте напишем скрипт «Светофор». Создайте деталь, положите в неё скрипт и напишите:
Когда вы нажмете Play, вы увидите, как деталь меняет цвет с задержкой.
Типы данных свойств
Очень важно понимать, какой тип данных ожидает свойство. Если вы попытаетесь положить текст в свойство прозрачности, получите ошибку.
| Свойство | Тип данных | Пример значения |
| :--- | :--- | :--- |
| Transparency | number | 0.5 |
| Name | string | "MyPart" |
| Anchored | boolean | true |
| CanCollide | boolean | false |
| Color | Color3 | Color3.fromRGB(255, 255, 255) |
| Position | Vector3 | Vector3.new(0, 10, 0) |
| Size | Vector3 | Vector3.new(4, 1, 2) |
О типах Vector3 (позиция и размер) мы поговорим подробнее в следующих уроках, так как они требуют понимания системы координат.
Практическое задание: Исчезающая платформа
Давайте создадим классическую ловушку из платформеров: платформу, которая исчезает через несколько секунд.
Создайте деталь (Part) в Workspace.
Убедитесь, что она закреплена (Anchored = true), чтобы она не упала сразу.
Добавьте внутрь детали Script.
Напишите код:Запустите игру и встаньте на платформу. Через 5 секунд она покраснеет, а еще через секунду вы провалитесь сквозь неё.
Заключение
Сегодня вы научились магии управления материей в Roblox. Вы узнали:
* Как устроена иерархия объектов (Parent/Children).
* Как находить объекты через game.Workspace.
* Как использовать script.Parent для универсальных скриптов.
* Как менять свойства: цвет, прозрачность и физику.
* Как использовать task.wait() для создания пауз.
Теперь ваш мир не статичен. Но пока что наши скрипты выполняются один раз и заканчиваются. А что, если мы хотим, чтобы платформа исчезала и появлялась снова и снова? Или чтобы дверь открывалась только тогда, когда к ней подходит игрок? Для этого нам понадобятся Циклы и Функции, о которых мы поговорим в следующих статьях.