Как сделать скрипт на хождение персонажа роблокс
Перейти к содержимому

Как сделать скрипт на хождение персонажа роблокс

  • автор:

Управление игровыми объектами (GameObjects) с помощью компонентов

В редакторе Unity вы изменяете свойства Компонента используя окно Inspector. Так, например, изменения позиции компонента Transform приведет к изменению позиции игрового объекта. Аналогично, вы можете изменить цвет материала компонента Renderer или массу твёрдого тела (RigidBody) с соответствующим влиянием на отображение или поведение игрового объекта. По большей части скрипты также изменяют свойства компонентов для управления игровыми объектами. Разница, однако, в том, что скрипт может изменять значение свойства постепенно со временем или по получению ввода от пользователя. За счет изменения, создания и уничтожения объектов в заданное время может быть реализован любой игровой процесс.

Обращение к компонентам

Наиболее простым и распространенным является случай, когда скрипту необходимо обратиться к другим компонентам, присоединенных к тому же GameObject. Как упоминалось во разделе Введение, компонент на самом деле является экземпляром класса, так что первым шагом будет получение ссылки на экземпляр компонента, с которым вы хотите работать. Это делается с помощью функции GetComponent. Типично, объект компонента сохраняют в переменную, это делается в C# посредством следующего синтаксиса:

void Start () < Rigidbody rb = GetComponent(); > 

В UnityScript синтаксис немного отличается:

function Start () < var rb = GetComponent.(); > 

Как только у вас есть ссылка на экземпляр компонента, вы можете устанавливать значения его свойств, тех же, которые вы можете изменить в окне Inspector:

void Start () < Rigidbody rb = GetComponent(); // Change the mass of the object's Rigidbody. rb.mass = 10f; > 

Дополнительная возможность, недоступная в окне Inspector — вызов функций экземпляра компонента:

void Start () < Rigidbody rb = GetComponent(); // Add a force to the Rigidbody. rb.AddForce(Vector3.up * 10f); > 

Имейте ввиду, что нет причины, по которой вы не можете иметь больше одного пользовательского скрипта, присоединенного к одному и тому же объекту. Если вам нужно обратиться к одному скрипту из другого, вы можете использовать, как обычно, GetComponent, используя при этом имя класса скрипта (или имя файла), чтобы указать какой тип Компонента вам нужен.

Если вы попытаетесь извлечь Компонент, который не был добавлен к Игровому Объекту, тогда GetComponent вернет null; возникнет ошибка пустой ссылки при выполнении (null reference error at runtime), если вы попытаетесь изменить какие-либо значения у пустого объекта.

Обращение к другим объектам

Пусть иногда они и существуют изолированно, все же, обычно, скрипты отслеживают другие объекты. Например, преследующий враг должен знать позицию игрока. Unity предоставляет несколько путей получения других объектов, каждый подходит для конкретной ситуации.

Связывание объектов через переменные

Самый простой способ найти нужный игровой объект — добавить в скрипт переменную типа GameObject с уровнем доступа public:

public class Enemy : MonoBehaviour < public GameObject player; // Other variables and functions. >

Переменная будет видна в окне Inspector, как и любые другие:

Теперь вы можете перетащить объект со сцены или из панели Hierarchy в эту переменную, чтобы назначить его. Функция GetComponent и доступ к переменным компонента доступны как для этого объекта, так и для других, то есть вы можете использовать следующий код:

public class Enemy : MonoBehaviour < public GameObject player; void Start() < // Start the enemy ten units behind the player character. transform.position = player.transform.position - Vector3.forward * 10f; >> 

Кроме того, если объявить переменную с доступом public и заданным типом компонента в вашем скрипте, вы сможете перетащить любой объект, который содержит присоединенный компонент такого типа. Это позволит обращаться к компоненту напрямую, а не через игровой объект.

public Transform playerTransform; 

Соединение объектов через переменные наиболее полезно, когда вы имеете дело с отдельными объектами, имеющими постоянную связь. Вы можете использовать массив для хранения связи с несколькими объектами одного типа, но связи все равно должны быть заданы в редакторе Unity, а не во время выполнения. Часто удобно находить объекты во время выполнения, и Unity предоставляет два основных способа сделать это, описанных ниже.

Нахождение дочерних объектов

Иногда игровая сцена может использовать несколько объектов одного типа, таких как враги, путевые точки и препятствия. Может возникнуть необходимость отслеживания их в определенном скрипте, который управляет или реагирует на них (например, все путевые точки могут потребоваться для скрипта поиска пути). Можно использовать переменные для связывания этих объектов, но это сделает процесс проектирования утомительным, если каждую новую путевую точку нужно будет перетащить в переменную в скрипте. Аналогично, при удалении путевой точки придется удалять ссылку на отсутствующий объект. В случаях, наподобие этого, чаще всего удобно управлять набором объектов, сделав их дочерними одного родительского объекта. Дочерние объекты могут быть получены, используя компонент Transform родителя (так как все игровые объекты неявно содержат Transform):

using UnityEngine; public class WaypointManager : MonoBehaviour < public Transform[] waypoints; void Start() < waypoints = new Transform[transform.childCount]; int i = 0; foreach (Transform t in transform) < waypoints[i++] = t; >> > 

Вы можете также найти заданный дочерний объект по имени, используя функцию Transform.Find:

transform.Find("Gun"); 

Это может быть полезно, когда объект содержит дочерний элемент, который может быть добавлен или удален в игровом процессе. Хороший пример — оружие, которое может быть подобрано и выброшено.

Нахождение объектов по имени или тегу

Нахождение игровых объектов в любом месте иерархии доступно всегда, когда у вас есть некоторая информация, по которой их можно идентифицировать. Отдельные объекты могут быть получены по имени, используя функцию GameObject.Find:

GameObject player; void Start()

Объект или коллекция объектов могут быть также найдены по их тегу, используя функции GameObject.FindWithTag и GameObject.FindGameObjectsWithTag:-

GameObject player; GameObject[] enemies; void Start()

Скрипт

Скрипт — это экземпляр базового класса, который содержит раздел плейса. Он кодируется на языке Lua но с дополнительными изменениями. После выполнения скрипты обычно запускаются автоматически и имеют доступ к событиям и свойствам плейса. Скрипты имеют возможность работать внутри Workspace или ServerScriptService

Скрипты являются фундаментальным элементом для Roblox Studio, и именно они лежат в основе создания плейсов. Все плейсы запускаются через несколько скриптов, которые являются одновременно потоковыми, что позволяет разработчикам запускать другие объекты поверх скриптов.

  • 1 Особенности Скрипта
  • 2 Пример
    • 2.1 Свойства Скрипта
    • 3.1 Серверные Скрипты (Server Script)
    • 3.2 Локальные Скрипты (Local Script)
    • 3.3 Модульные Скрипты (Module Script)
      • 3.3.1 Пример

      Особенности Скрипта [ ]

      Скрипт имеет бесконечное количество строк, которые он может держать в данный момент времени. Отступ каждой строки заранее определяется ее предыдущими строками. Например, если предыдущая строка состоит из function, Lua сможет сделать отступ в следующей строке, чтобы форматирование таких скриптов выглядело читаемым при перезагрузке. В свою очередь, скрипт добавит «end» в следующую строку.

      Пример [ ]

      Серверный скрипт, который если вставить в деталь, игрок, который прикоснётся к этой детали, умрёт.

      script.Parent.Touched:Connect(function(hit : Model?) if hit.Parent:FindFirstChildWhichIsA("Humanoid") then hit.Parent:FindFirstChildWhichIsA("Humanoid"):TakeDamage(100) end end) 

      Свойства Скрипта [ ]

      • Отключено определяет, будет ли выполняться скрипт или нет.
      • LinkedSource используется для хранения URL-адреса, указывающего на источник онлайн-скрипта.
      • CurrentEditor возвращает игрока, который в данный момент редактирует скрипт.

      Типы Скриптов [ ]

      Серверные Скрипты (Server Script) [ ]

      Как следует из названия, серверные скрипты имеют дело с серверными событиями, такими как таблица лидеров. Серверные скрипты могут обращаться только к серверным событиям и свойствам. То есть серверный скрипт не может получить доступ к графическому интерфейсу игрока, а также к самому клиенту. Однако они могут иметь возможность взаимодействовать с локальными скриптами, чтобы при необходимости манипулировать игроком. Это делается с помощью удаленных событий и удаленных функций. Серверные скрипты могут получить доступ только к рабочей области и ServerScriptService.

      Локальные Скрипты (Local Script) [ ]

      Локальные скрипты работают на внутренних данных. То есть локальные скрипты имеют возможность манипулировать локальным игроком, а также получать доступ к событиям и свойствам клиента. Таким образом, локальные скрипты в основном используются при работе с игроком, например с камерой. Однако они могут иметь возможность взаимодействовать с серверными скриптами. Чтобы получить доступ к событиям сервера через связь RemoteEvents.

      Модульные Скрипты (Module Script) [ ]

      Модульные скрипты используются для удобной организации кода по классам. Модульные скрипты вызываются с помощью метода require(), который возвращает таблицу, возвращённую в самом модуле.

      Пример [ ]
      -- пусть данный модульный скрипт будет находиться в ReplicatedStorage local m = <> -- все модули - переменные в виде таблиц m.__index = m function m.new() -- конструктор класса local self = setmetatable(<>, m) -- присваиваем метатаблицу к таблице m, self - и есть наш m return self end function m.test() print("это работает") end return m -- возвращает наш модуль 
      local module = require(game:GetService("ReplicatedStorage").myModule) local test = module.new() test.test() 

      Что за паркур вы построили в Roblox? Давайте сделаем круче

      Каникулы с Roblox Studio


      Прочитал на Хабре заметку “Что делать с детьми летом, если ты айтишник?” и взгрустнулось:

      • во-первых, паяльник — это удел очень малой части “широких слоев” IT-шников
      • во-вторых, мало какому ребенку интересно сортировать резисторы по цветным колечкам;
      • в-третьих, паяльник — это ретро, и даже, если елочку нарядили и она весело мигает огоньками, что дальше? Что стало понятнее? Где применить полученные знания и навыки?

      И руки потянулись к клавиатуре, чтобы написать пару заметок, предлагающих родителям альтернативные варианты вовлечения детей в IT, кстати, не только в soft, но и в hard.

      На возраст детей, о котором идет речь в заметке, есть более интересные и, главное, более перспективные альтернативы, не связанные с риском уронить горячий паяльник на колени или взять его чуть выше рукоятки. Например, Scratch и Roblox. Ну не стыдно ли вам господа IT-шники за страну, глядя на такие вот веселые картинки?

      Не странная ли это статистика: когда начнем догонять?

      А детям упомянутого возраста Scratch — попроще, да и интереснее, чем сортировка резисторов…

      Но, как говорится: “Критикуешь — предлагай!” Предлагаю: “А не замахнуться ли нам на Вильяма Шекспира?” Посмотрите, сколько на Youtube роликов про строительство паркуров в Roblox — грубо говоря, куча! Но, все не то! Давайте сделаем немного круче! Предлагаемый ниже текст взят из нашей с внуком (недавно изданной) книжки и рассчитан на самостоятельное усвоение детьми возраста “10+”.

      Глава 9. Программируем паркур

      Вы научились создавать строительные блоки и задавать им нужные вам свойства. Давайте применим полученные навыки для создания игры.

      Разработка паркура

      Сначала разложите элементы вашего паркура прямо на Baseplate. Раскрасьте платформы паркура, чтобы они выглядели привлекательнее. Затем, в меню Explorer наведите курсор мыши на Baseplate, нажмите правую кнопку мыши и выберите в выпадающем меню опцию DeleteBaseplate будет удалена, а созданные вами платформы “повиснут” в небе (если, конечно, вы “заякорили” их — иначе, все они упадут в бездну).

      Можно, конечно, несколько изменить положение и ориентацию в пространстве отдельных площадок паркура, используя свойства Orientation в окне Properties, но это не слишком увеличит сложность его прохождения. Другое дело, если заставить платформы паркура двигаться прямо в процессе игры. Давайте разбираться, как это сделать. Первое, что нужно знать: в каждой игре Roblox позиция Х=0, Y=0, Z=0 всегда находится в центре игрового пространства и совпадает с местом спавна игрока.

      Для определения положении и ориентации любых parts в 3D-пространстве игры можно использовать данные типа Vector3, которые используют те же координаты: X, Y и Z. Поясним это на примере простой программы, скрипт которой нужно вставить, например, в заранее созданный в Workplace объект-платформу obby_p:

      1 local cf_part = script.Parent
      2 x,y,z = 2,8,2
      3 cf_part.Position = Vector3.new(x,y,z)
      4 cf_part.Size = Vector3.new(3,0.5,3)
      5 cf_part.BrickColor = BrickColor.new (255,0,0)
      6 while true do
      7 cf_part.Position = Vector3.new(x,y,z)
      8 cf_part.Orientation = Vector3.new(x*45,y,z)
      9 wait(1)
      10 x = x +1
      11 end

      • в строке 1 создаем переменную cf_part и указываем ее Родителя obby_p;
      • в строке 2 задаем исходные значения сразу трем переменным;
      • в строке 3 задаем при помощи Vector3 позицию obby_p (указав значение свойства Position объекта cf_part) — теперь его позиция будет соответствовать тем координатам, которые указаны в строке 2;
      • в строке 4 задаем размеры cf_part (указав при помощи Vector3 свойству Size размеры 3 х 0,5 х 3 шипа);
      • в строке 5 красим obby_p в красный цвет;
      • цикл while true в строках 6…11 меняет не только позицию, но и ориентацию obby_p за счет изменения угла ее поворота вокруг оси Х. Ведь через каждую секунду значение переменной Х меняется на “1”, а значит, меняется значение координаты Х в свойствах Position и Orientation.

      Запустите программу, вы увидите, что obby_p меняет свое местоположение на игровом поле и, одновременно, поворачивается на 45 градусов при каждом перемещении вдоль оси Х. Теперь вы можете, например, используя цикл while, заставить некоторые из платформ паркура качаться то в одну, то в другую сторону, да еще наклоняться, усложняя тем самым прохождение паркура. Продублируйте obby_p и откорректируйте скрипт новой part:

      • измените ее цвет;
      • измените ее положение (чтобы parts не мешали друг другу);
      • измените “содержимое” цикла while true, а именно:

      1 local cf_part = script.Parent
      2 x,y,z=2,4,2
      3 i=0
      4 cf_part.Position = Vector3.new(x,y,z)
      5 cf_part.Size = Vector3.new(3,0.5,3)
      6 cf_part.BrickColor = BrickColor.new(0,200,0)
      7 while true do
      8 while ido
      9 cf_part.Position = cf_part.Position + Vector3.new(0.1,0,0)
      10 cf_part.Orientation= cf_part.Orientation + Vector3.new(2,0,0)
      11 wait(0.2)
      12 i = i +1
      13 end
      14 i=0
      15 while ido
      16 cf_part.Position = cf_part.Position + Vector3.new(-0.1,0,0)
      17 cf_part.Orientation= cf_part.Orientation + Vector3.new(-2,0,0)
      18 wait(0.2)
      19 i = i +1
      20 end
      21 i=0
      22 end

      Поворот платформы

      Запустите игру. Согласитесь, пройти паркур с такими платформами будет гораздо сложнее.

      Давайте разберемся с новым скриптом:

      мы видим, что в обоих циклах while i переменная i изменяется от “0” до “50”;
      — с каждой итерацией (с каждым шагом) цикла положение obby_p по оси Х изменяется либо на “0,1”, либо на “-0,1”, а угол поворота obby_p вокруг оси Х изменяется на “2” либо на “-2”;
      — после каждой итерации программа приостанавливается на время равное 0,2 секунды;
      — получается, что значения “0.1” и “-0.1” соответствуют понятию “скорость”, а максимальное значение переменной i — понятию времени, затраченного на движение платформы. В результате, путь пройденный obby_p, можно выразить формулой:
      S = V*t = 0,1 * 50 = 5 шипов.
      Вы всегда можете рассчитать нужный вам диапазон перемещения платформ по оси Х;
      — аналогично, вы можете заранее рассчитать необходимые вам углы поворота платформ;
      — кроме того, меняя “скорость” и “шаг” изменения времени (i) мы можем изменять скорость движения и смены ориентации платформ.

      А почему мы ограничились изменением положения только по оси Х? Можно, аналогично, менять положение и ориентацию платформ паркура по другим осям. В том числе, одновременно. Обязательно попробуйте это сделать.

      Чертово колесо

      Но и это еще не все. Вспомните, как движутся кабинки “чертова колеса”. А что, если сделать, чтобы и некоторые ваши платформы двигались так же? Давайте, попробуем. Соорудите еще одну платформу, например, part_sin, вставьте в нее скрипт, приведенный ниже и проверьте, как это работает. Вы увидите, что цель достигнута.

      Строим

      1 local part_sin = script.Parent
      2 i=0
      3 x,y,z = 12,3,12
      4 part_sin.Position = Vector3.new(x,y,z)
      5 part_sin.Size = Vector3.new(6,0.5,6)
      6 part_sin.BrickColor = BrickColor.new (0,0,250)
      7 while true do
      8 i_rad=math.rad(i)
      9 part_sin.Position = part_sin.Position + Vector3.new(math.sin(i_rad)/2, math.cos(i_rad)/2,0)
      10 wait(.2)
      11 i = i + 10
      12 end

      • в строке 3 мы изменили исходные координаты платформы;
      • в строке 5 увеличили размеры платформы;
      • в строке 6 изменили цвет платформы на синий;
      • в строке 8 (внутри бесконечного цикла while true) мы преобразуем числовое значение переменной i (которая у нас будет выполнять роль величины угла поворота платформы) в радианы, используя для этого уже знакомую математическую функцию math.rad;
      • в строке 9 мы (при помощи Vector3.new) наращиваем исходную позицию платформы part_sin на величину, соответствующую:

      Изменяем положение объектов при помощи CFrame

      Но, продолжим разбираться с положением и ориентацией parts. Вы уже неоднократно заглядывали в окно Properties строительных блоков и помните, что в этом окне их положение в игровом пространстве описывает параметр, который называется CFrame. Действительно в Lua есть еще один “инструмент”, позволяющий задать в скрипте любой part нужное вам положение и ориентацию. Для этого можно использовать выражение:

      cf_part.CFrame = CFrame.new(Х, Y, Z) * CFrame.Angles(math.rad(n1),math.rad(n2), math.rad(n3)),

      где: X,Y,Z — нужные вам координаты центра obby_p,
      Angles — указывает на изменение ориентации obby_p в пространстве;
      n1, n2, n3 — углы поворота, соответствующие осям координат X,Y,Z;
      math.rad — функция, преобразующая угол из градусов в радианы.

      Если же менять ориентацию part в пространстве не нужно, то можно использовать более короткое выражение:

      cf_part.CFrame = CFrame.new(Х, Y, Z)

      Поставьте в строках 7 и 8 скрипта (первого из ранее созданных obby_p) по два тире (как для вставки комментариев), чтобы эти строки перестали действовать. А вместо них вставьте новую строку кода:

      cf_part.CFrame = CFrame.new(x,y,z) * CFrame.Angles(math.rad(x*45), 0, 0)

      Запустив программу, вы легко убедитесь, что поведение obby_p нисколько не изменилось. То есть, в данном случае конструкции Vector3 и CFrame действуют полностью аналогично. Теперь, самостоятельно, попробуйте при помощи CFrame вращать платформу part_sin, как в “чертовом колесе”.

      Что же лучше использовать Position или CFrame для управления перемещениями parts? В описанных выше скриптах мы перемещали простые parts. Но, часто требуется перемещать одновременно группы объектов, скрепленных друг с другом (состоящие из нескольких “сваренных” деталей). Если Position одной из сваренных деталей изменять, эта деталь будет двигаться, но ни одна из соединенных с ней деталей не будет двигаться вместе с ней. Напротив, если изменяется CFrame одной из деталей, любой объект, приваренный к этой детали, также будет двигаться.

      Что еще можно предложить, чтобы сделать ваш паркур еще круче? А давайте вырежем в некоторых платформах отверстия, через которые игроки могут провалиться при неудачном прыжке. Вот скрипт такой платформы, перемещающейся, как кабинка “чертового колеса”.

      Платформа с отверстием-ловушкой

      1 local part_sin = script.Parent
      2 i=0
      3 x,y,z = 12,6,12
      4 part_sin.Position = Vector3.new(x,y,z)
      5 part_sin.Size = Vector3.new(6,1,6)
      6 part_sin.BrickColor = BrickColor.new (0,0,250)
      7 part_sin.Anchored = true
      8 local part_2 = Instance.new(«Part», workspace)
      9 part_2.Shape = «Ball»
      10 x1,y1,z1 = 12,6,12
      11 part_2.Position = Vector3.new(x1,y1,z1)
      12 part_2.Size = Vector3.new(3,3,3)
      13 part_2.Anchored = true
      14 new_Union = part_sin:SubtractAsync()
      15 new_Union.Parent = game.Workspace
      16 new_Union.Position = part_sin.Position
      17 new_Union.Anchored = true
      18 part_sin:Destroy()
      19 part_2:Destroy()
      20 while true do
      21 i_rad=math.rad(i)
      22 new_Union.Position = new_Union.Position + Vector3.new(math.sin(i_rad)/5, math.cos(i_rad)/5,0)
      23 wait(.2)
      24 i = i + 3
      25 end

      Вы видите, что в строках 1…7 нет никаких изменений в сравнении с прежним скриптом, описывающим part_sin. А вот в строке 8 появилось что-то новое. Оказывается, в языке Луа новые (самые разные) объекты можно создавать внутри скрипта с помощью функции Instance.new() — где в скобках нужно указывать тип создаваемого объекта:

      Преграда, качающаяся из стороны в сторону и мешающая прыжку с платформы на платформу

      • именно так в строке 8 (указав тип объекта “Part” и указав его Родителя — workspace) мы создаем объект part_2;
      • в строке 9 определяем, что формой этого объекта является шар (Ball);
      • в строке 10 задаем значения трем переменным х1, y1, z1, которые в следующей строке используем в качестве координат, в которые поместим наш новый объект. Обратите внимание: значения координат совпадают со значением координат x, y, z — значит, центры part_sin и part_2 совпадают. В этом случае, можно было бы использовать в строках 4 и 11 одни и те же переменные, но мы решили показать, как быть, если вам будут нужны другие координаты;
      • в строке 12 задаем размер part_2 равным 3 х 3 х 3 шипа;
      • в строке 13 «якорим» об ъект;
      • в строке 14 создаем объект new_Union, представляющий собой “разность” фигур part_sin и part_2. То есть, вырезаем в платформе part_sin отверстие с диаметром равным диаметру шара part_2. Обратите внимание на фигурные скобки, в которых указан объект part_2. Фигурные скобки означают, что в них может быть указан список. Если бы вам нужно было «вычесть» из part_sin не один, а несколько объектов, вы могли бы указать их в этих фигурных списках через запятую;
      • в строке 15 указываем Родителя new_Union;
      • в строке 16 указываем, что положение new_Union в игровом пространстве совпадает с положением part_sin;
      • строка 17 «якорит» newUnion. Получается, что мы программным способом создали твердотельную модель, и элементы, из которых она состоит на уже не нужны;
      • в строках 18, 19 уничтожаем ненужные нам part_sin и part_2, используя функцию Destroy();
      • строки бесконечного цикла while true 20…25 управляют движением объекта new_Union, точно также, как раньше управляли платформой part_sin. Теперь игрокам будет еще труднее, ведь они могут провалиться сквозь отверстие в платформе.

      Согласитесь, можно вставить в паркур не только платформы, но и преграды, мешающие прыжкам игроков. И теперь вы знаете, как это все сделать.” (конец цитаты)

      Образец выполнения скриптов в книжке

      Если вы дочитали (просмотрели) текст до этого места и вам интересно, о какой книжке идет речь — погуглите «Азбука программирования игр в Roblox Studio». Кстати, в статье на сайте Хабра невозможно воспроизвести тексты скриптов в том виде, в каком они представлены в нашей книге, поэтому прикладываю картинку с иллюстрацией. Примерно также, как это делает Roblox, мы применили в текстах скриптов цветовое выделение — это важно, для упрощения восприятия скриптов в возрасте «10+», на который и ориентирована книжка.

      Теперь, если эта заметка вызовет хоть какой-то интерес, осталось написать про альтернативу в сфере hard. Как говаривали древние: Dixi et animam meam salvāvi.

      • обучение программированию
      • детское программирование
      • книги по программированию
      • roblox studio

      Создание 3D-игр в Roblox Studio для детей и подростков — бесплатные видеоуроки

      Подготовили плейлист с видеоуроками по Roblox Studio и программированию на Lua. Попробуйте покопаться в Роблокс и сделать свои первые игры.

      Обложка поста Создание 3D-игр в Roblox Studio для детей и подростков — бесплатные видеоуроки

      Roblox (Роблокс) — это платформа, где можно выложить 3D-игру, созданную в специальной программе — Roblox Studio (Роблокс Студио). Здесь даже дети с 8-9 лет могут моделировать 3D-объекты, создавать игровые вселенные, учиться писать скрипты на Lua — простом и легко усваиваемом языке программирования.

      Мы собрали серию видеоуроков, которые познакомят детей с разработкой игр в Роблокс Студио и программированием на Lua. Короткие пошаговые уроки рассчитаны на начинающих разработчиков и будут полезны детям и подросткам: сначала мы изучим интерфейс программы и основы языка Lua, а затем создадим игры разных жанров. Попробуйте покопаться в Роблокс и сделать свои первые игры с помощью этого плейлиста.

      Урок 0. Скачивание и установка Roblox Studio

      Для начала давайте установим Roblox и Roblox Studio на компьютер. Подробная инструкция в видео.

      Урок 1. Создание первой карты в Роблокс Студио

      Процесс обучения начнём с разбора интерфейса программы, а заодно попробуем создать первую игровую карту.

      Урок 2. Основы Lua, первые шаги в создании игры

      В этом уроке мы разберём, как создать скрипт на языке Lua. А также рассмотрим особенности этого языка, попробуем сделать небольшую программу. Кроме того, мы научимся делать спавн героя и создадим мини-игру в жанре шутера (стрелялки).

      Урок 3. Создание уровней, циклы

      Мы продолжим изучать язык программирования Lua и писать скрипты, познакомимся с понятием циклов. А также подробно разберём тему добавления уровней в игру, попробуем создать проект наподобие популярного LineRunner.

      Урок 4. Создание первого уровня игры Obby

      В этом видео мы познакомимся с понятиями условия и функции в программировании. В процессе создадим игру в жанре Obby — проект с полосой препятствий. И добавим в нее несколько уровней.

      Урок 5. Создание диалогов в Роблокс

      На этом занятии займёмся построением диалогов. Чтобы их осуществить, нам нужно добавить несколько второстепенных персонажей в наш «платформер».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *