# Создание игровых объектов с помощью скрипта

Теперь рассмотрим последний вариант создания игровых моделей. В нем мы будем использовать язык программирования Lua. Создадим прямоугольный блок стандартного размера. Для этого в скрипте в Workspace вызовем функцию Instance. Эта функция отвечает за создание объекта. Для того чтобы создалась именно деталь, необходимо прописать параметр Part, но, чтобы деталь создалась именно в нашем игровом мире, нужно добавить параметр workspace:\
\\

![image](https://habrastorage.org/r/w1560/webt/op/ds/iw/opdsiw86bxo9olipflvfvwo4le4.png)

\
Ниже представлен код с указанием размера детали:\
\\

![image](https://habrastorage.org/r/w1560/webt/5s/kw/ce/5skwcep-mzcysk4iguqmkqmujf4.png)

\
По умолчанию при создании детали создается Block, у которого снизу и сверху есть измененная поверхность. Сверху это Studs (шипы), а снизу Inlets (выемки). Они нужны для скрепления с поверхностью. Параметры можно настроить в классе Surface.\
\
Этот класс можно найти как в отдельном окне инструментов (в урезанном виде), так и в свойствах конкретной детали.\
\\

![image](https://habrastorage.org/r/w1560/webt/ua/rl/en/uarlenuqxo9c6_bweawzpfhihew.png)

\\

![image](https://habrastorage.org/r/w1560/webt/fc/ew/r_/fcewr_izngy6otnmultllxlz5kq.png)

\
Чтобы сгладить верхние и нижние стороны, достаточно прописать для параметра BottomSurface и TopSurface (индекс 0 или 9).\
\\

![image](https://habrastorage.org/r/w1560/webt/5k/ad/zo/5kadzoy6m80r4jzzps3xzl7k8se.png)

\\

![image](https://habrastorage.org/r/w1560/webt/db/mr/7y/dbmr7yxol8-964l8rzajye5as7e.png)

\
Из предыдущих глав ты уже знаешь, как накладывать материал и цвет на объект, а также регулировать размер и положение.\
\
Сейчас попробуем создать дом с крышей, похожий на предыдущий. Начнем с пола и стен. Для этого создадим новый игровой объект и в Workspace напишем скрипт:\
\\

![image](https://habrastorage.org/r/w1560/webt/fd/j_/ih/fdj_ihvzhgqlwoe1op2oyhortha.png)

\
Благодаря этой части кода будет создана заготовка для пола размером 50 × 50 и 1 studs в высоту, центр пола будет располагаться в точке (0, 0, 0).\
\
Зададим полу светло-коричневый цвет и добавим материал Wood planks:\
\\

![image](https://habrastorage.org/r/w1560/webt/67/hy/ss/67hysszyr15_5ivm_oykvg6vu_a.png)

\
Далее приступим к созданию стен, но так, чтобы оставались места под дверь и окна.\
\
Начнем со сплошной стены:\
\\

![image](https://habrastorage.org/r/w1560/webt/qq/su/bt/qqsubtbcgos2q5b1lfyakrcz0om.png)

\\

![image](https://habrastorage.org/r/w1560/webt/kg/mq/tg/kgmqtg-swtwvoqznbnozf50zfbq.png)

\
Создадим еще одну сплошную стену по оси x. Ее нужно повернуть (или можно просто изменить размер). Но для примера используем поворот:\
\\

![image](https://habrastorage.org/r/w1560/webt/rc/g4/1r/rcg41rcsut1nevelkty2xcj-88o.png)

\
Теперь приступим к созданию более сложной конструкции — стены с проемом для двери. Есть два варианта.\
\
1\. Создать три части стены и расположить в определенном порядке, чтобы получилось отверстие.\
\
2\. Использовать функцию вырезания отверстия в стене.\
\
Для первого варианта строчек кода будет больше, чем для второго. Да и второй вариант создает данную стену цельным объектом. Поэтому лучше использовать второй вариант.\
\
Нам нужно создать третью стену и блок, который будет иметь размер дверного проема:\
\\

![image](https://habrastorage.org/r/w1560/webt/zm/0i/5l/zm0i5ltodjjha0n8qsam6mgfrsy.png)

\
Заметь, что положение блока под дверь должно быть строго внутри третьей стены.\
\
Запусти игру и посмотри на результат (рис. 3.125).\
\\

![image](https://habrastorage.org/r/w1560/webt/sr/1j/gg/sr1jggmjavd4jmdg6wvchd_wqiq.png)

\
Осталось вырезать блок в стене, и за это отвечает функция SubtractAsync. Под вырезанием понимается создание уже нового объекта «Стена с отверстием», который должен быть привязан к игровому пространству workspace. Созданный объект наложится на предыдущие (третья стена и дверь), поэтому их нужно удалить:\
\\

![image](https://habrastorage.org/r/w1560/webt/_p/dj/z-/_pdjz-rf6y4ppmxpwwwgrtljuy0.png)

\
Обрати внимание: в функции SubtractAsync содержится тип данных — таблица, и поэтому этот объект заключен в фигурные скобки. Таких объектов может быть много, просто в нашем случае он один.\
\\

![image](https://habrastorage.org/r/w1560/webt/fl/q9/u4/flq9u4gu6id9-zaoxrjqio1c0-g.png)

\
По такому же принципу создадим четвертую стену с двумя окнами:\
\\

![image](https://habrastorage.org/r/w1560/webt/ea/on/no/eaonnowejvxnpjkd0n_ymlmshys.png)

\
\
Для окон добавим прозрачность с помощью функции Transparency блокам window1 и window2 и при этом не станем их удалять — они будут имитировать стекла.\
\
Подчеркнем снова: код содержится в одном скрипте.\
\\

![image](https://habrastorage.org/r/w1560/webt/vh/yd/s5/vhyds5d9hwov96k1wa8nhfv2woe.png)

\
А теперь создадим потолок и крышу. Потолок сделать легче, для этого достаточно скопировать код для пола и указать положение по оси y, равное 16:\
\\

![image](https://habrastorage.org/r/w1560/webt/s_/71/qx/s_71qxefkzi_1z_waqjorlcsr98.png)

\
Создание крыши — сложное задание. Ниже будет представлен пример создания треугольной крыши по такому алгоритму:\
\\

* создаем все четыре элемента крыши;
* настраиваем два боковых элемента, они должны находиться под углом 45° и идти от края крыши до соприкосновения друг с другом;

\
Дом готов.\
\\

![image](https://habrastorage.org/r/w1560/webt/zz/o5/n7/zzo5n7h71oabh4aeg4wbz7kxe3q.png)

\
Попробуй сделать крышу без подсказки:\
\\

![image](https://habrastorage.org/r/w1560/webt/y2/ys/iu/y2ysiugcfakctvtbdjdjbv42uu4.png)

\\

![image](https://habrastorage.org/r/w1560/webt/tl/5g/7c/tl5g7c7ppxusb8fqbvrwmpgzrmk.png)

\\

![image](https://habrastorage.org/r/w1560/webt/tw/ep/_e/twep_ezccu7sgyeecte-n7pjvli.png)

\\

![image](https://habrastorage.org/r/w1560/webt/lg/hw/ik/lghwikxdd5u0i3nkp42vtjrzzqa.png)

\
Смещаем боковые элементы крыши.\
\\

![image](https://habrastorage.org/r/w1560/webt/kv/7x/gi/kv7xgins0xmvxieq4yuax4ggvzk.png)

\
Поздравляю: дом построен!
