июль 13, 2022

uLua Paddle Game

Добавить в
Мои игры
Торрент
Скачать

В этом проекте я разработал API для базовой игры с веслом, чтобы продемонстрировать гибкость платформы API uLua как инструмента для моддинга.

uLua  – это платформа Game API для Unity. Он призван упростить разработку игрового API на Lua для вашего проекта Unity.

uLua охватывает MoonSharp и предоставляет объектно-ориентированную среду для разработки API на Lua. Он работает, устанавливая контекст Lua для всего приложения и предоставляя ему игровые объекты. Объекты, открытые для Lua, затем могут быть доступны в сценариях Lua для реализации игрового поведения. Кроме того, пользовательские сценарии Lua могут выполняться во время выполнения, чтобы разрешить модификацию вашего проекта.

uLua реализует следующие функции:

  • Структура выполнения скриптов, позволяющая выполнять скрипты Lua из папки "Ресурсы" или внешнего каталога.
  • Система обработки событий, позволяющая вызывать события на C# и обрабатывать их на Lua.< /li>
  • Базовые классы, которые предоставляют ваши игровые объекты и структуры данных для Lua для разработки вашего Game API.
  • Система функций обратного вызова для ваших объектов Game API.
Документация

К этому документу прилагается документация по исходному коду, которую можно найти на страницах GitHub репозитория проекта.

Если у вас возникнут дополнительные вопросы, обращайтесь по адресу [email protected].

Этот проект является результатом многочасовой напряженной работы. Пожалуйста, поддержите меня Старризагрузите этот проект на GitHub.

Если вы приобрели uLua, оставьте отзыв в магазине активов! Следите за моим твиттером!

Учебник по использованию

Примечание. Перед чтением этого документа рекомендуется прочитать Учебник по использованию uLua в полной документации uLua .

Основное поведение и игровая логика этой игры реализованы в Unity Engine. В частности:

  • Скрипты контроллера для объектов uLua.PaddleGame.Paddle и uLua.PaddleGame.Ball.
  • Вызов игровых событий и обратный вызов объекта функции.
  • Логика обнаружения столкновений для всех объектов.

Однако сцена Unity для этой игры не содержит мяча, ракетки или кирпичей. Уровни для этой игры полностью настраиваются через Game API на Lua.

1. Модификация игры

Сценарий Lua, который выполняется по умолчанию для этой игры, указан в конце этого раздела.

Вы можете изменить игру, полностью заменив исходный сценарий или расширив его. Для этого вы должны поместить свои новые Lua-скрипты в соответствующий внешний каталог. По умолчанию в качестве внешнего каталога используется Application.persistentDataPath Unity. Дополнительные сведения для различных платформ см. в соответствующей документации Unity.

Для этого проекта и конкретно для Windows каталог для сценариев будет следующим:

C:\Users\{Пользователь}\AppData\LocalLow\ANT Software\Игра с веслом\

Чтобы заменить исходный сценарий сцены, необходимо создать в этом каталоге файл с именем PaddleGame.lua. Рекомендую скопировать скрипт ниже, чтобы начать вносить небольшие правки для ознакомления с игровым API.

Чтобы расширить исходный сценарий сцены, вы можете добавить любые сценарии lua в папку «UserScripts» во внешнем каталоге. Опять же, для Windows это будет следующим:

C:\Users\{User}\AppData\LocalLow\ANT Software\Paddle Game\UserScripts\ 2. Скриптовый API 2.1. Игровые объекты

Игровой API содержит следующие объекты/структуры данных:

  • Игра: объект-менеджер, который используется для создания и отслеживания мячей, ракеток и кирпичей на уровне.
  • Настройки:
  • Настройки: strong> Структура данных, которая содержит текущий уровень, оставшиеся жизни, счет и другие игровые настройки.
  • LevelText: элемент пользовательского интерфейса для отображения текущего уровня.
  • LivesText: элемент пользовательского интерфейса для отображения оставшихся жизней.
  • ScoreText: элемент пользовательского интерфейса для отображения счета игрока.

Все объекты мяча, кирпича и ракетки также доступны API игры, однако их имена основаны на среде выполнения приложения, если иное не указано в соответствующей команде:

Game:AddBall(0, 0, 5, 0.5, "ИмяМяча");

Если в этом методе не указывать последний параметр, имя объекта будет создано автоматически.проект Ниже приведен пример автоматически сгенерированного имени:

Мяч12345

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

  • uLua.PaddleGame.Ball
  • uLua.PaddleGame.Brick
  • uLua.PaddleGame .Paddle
  • uLua.PaddleGame.Game
  • uLua.PaddleGame.Settings
  • uLua.PaddleGame.UIText
2.2. События и функции обратного вызова

Следующие события вызываются во время игры и могут быть обработаны в Lua:

  • BoundaryHit: вызывается, когда мяч касается нижней границы экрана.
  • BrickDestroyed: вызывается, когда кирпич разрушается. Передает один аргумент, представляющий собой разрушенный кирпичный объект.
  • BrickHit: вызывается при ударе по кирпичу. Передает один аргумент, представляющий собой кирпичный объект, в который попали.
  • SceneLoaded: вызывается при загрузке сцены.
  • UIUpdate: Вызывается при изменении уровня игры, жизней игрока или счета игрока.

Следующие функции обратного вызова объекта вызываются во время игры и могут обрабатываться в Lua:

  • Ball:OnHit(): вызывается, когда мяч попадает в цель.это объект. Для обработки в API необходимо знать имя шара.
  • Brick:OnHit(): Вызывается, когда кирпич ударяет по объекту. Для обработки в API имя кирпича должно быть известно.
  • Paddle:OnHit(): Вызывается, когда ракетка касается объекта. Для обработки в API необходимо знать имя весла.

PaddleGame.lua

--[[ июнь 2022 г. ]] --[[ Этот Lua-скрипт реализует большую часть игрового процесса в этой простой игре в стиле Paddle. ]] --[[ Он предназначен для демонстрации гибкости фреймворка uLua API как инструмента для моддинга. ]] math.randomseed(os.time()); -- Используется для генерации случайного начального числа. local BrickColors = { -- Таблица цветов кирпичей. Используется для окрашивания блоков по разным значениям здоровья. {1.0, 0.0, 0.0}, -- (1) Красный {1.0, 0.5, 0.0}, -- (2) Оранжевый {1.0, 1.0, 0.0}, -- (3) Желтый {0,5, 1,0, 0,0}, -- (4) Зеленый газон {0,0, 1,0, 0,0}, -- (5) Зеленый {0.0, 1.0, 0.5}, -- (6) Весенняя зелень {0.0, 1.0, 1.0}, -- (7) Цвет морской волны {0.0, 0.5, 1.0}, -- (8) Синий Доджер {0,0, 0,0, 1,0}, -- (9) Бсиний {1.0, 0.0, 1.0}, -- (10) Пурпурный } --[[ Методы ]] --[[ Следующие методы полностью реализованы в Lua и не имеют аналогов в Unity. ]] --[[ Они определены как элементы объектов «Настройки» и «Игра» в декоративных целях. ]] -- Используется для увеличения уровня игры после очистки сцены. Эта функция заканчивается запуском нового уровня. -- С каждым повышением уровня игра ускоряется. Даже уровни дают бонусную жизнь. функция Game:OnLevelFinished() -- Уровень приращения если (Settings.Level%2 == 0), то Settings:AddLife(); end -- Добавлять жизни только на четных уровнях. Настройки:ДобавитьУровень(); -- Ускорить игру если (Настройки.Уровень <= Настройки.МаксимальныйУровень), то Игра:Ускорение(); еще Настройки.Уровень = Настройки.МаксимальныйУровень; конец -- Начать новый уровень я: Старт(); конец -- Используется для сброса состояния игры, когда все жизни потеряны. Настройки функции: Сброс() Игра:SlowDown(); самоуровень = 1; -- Используется для отслеживания текущего уровня. self.Жизни = 3; -- Используется для отслеживания оставшихся жизней. Селф.Оценка = 0; -- Используется для отслеживания счета игрока. self.MaximumLevel = 10; -- Используется для обозначения максимального gаме уровень. самостоятельная задержка = 0,5; -- Задержка перед тем, как мяч придет в движение (в секундах). self.SpeedIncrement = 0,125; -- Приращение скорости мяча/весла на уровень. self.ColorMultiplier = 0,75; -- Множитель для регулировки интенсивности цвета кирпича. Игра:OnUIUpdate(); -- Принудительное обновление пользовательского интерфейса. конец -- Используется для создания случайного расположения кирпичей. -- Здоровье для каждого кирпича назначается случайным образом в диапазоне от 1 до текущего уровня. -- Цвет для каждого кирпича назначается на основе его здоровья и с помощью таблицы BrickColors. функция Игра:Старт() -- Очистить сцену Я: Очистить(); -- Настроить весло и мяч локальный прирост скорости = Settings.TotalSpeedIncrement; self:AddBall(0, -1,75, 4+SpeedIncrement, Settings.Delay); self:AddPaddle(0, -2,25, 6+SpeedIncrement, SpeedIncrement+1); -- Создать случайный уровень локальные столбцы = math.random(Settings.Level/2+1, Settings.Level+2); локальные строки = Settings.Level+2; для j=Rows/2-1,-Rows/2+1,-1 сделать локальный приращение = 1; Столбцы = Столбцы -1; если (столбцы < 1), то приращение = -1; конец для i=-Столбцы/2,Столбцы/2,Приращение сделать локальное здоровье = math.random(1, Settings.Level/2+j); если (Здоровье < 1), то Здоровье = 1; иначе если (Здоровье > 10), то Здоровье = 10; конец локальный блок = Game:AddBrick(i*0,6125, j*0,33+1,0, здоровье);Brick.Color = Color.__new(BrickColors[Health][1]*Settings.ColorMultiplier, BrickColors[Health][2]*Settings.ColorMultiplier, BrickColors[Health][3]*Settings.ColorMultiplier); конец конец конец --[[ Обработчики событий ]] --[[ Следующие обработчики событий полностью реализованы в Lua. Они определены как члены объекта «Игра» для ]] --[[ декоративные цели. События регистрируются в сцене Unity, а затем при необходимости вызываются в Unity. ]] -- Вызывается, когда мяч достигает нижней границы. -- Уменьшает количество жизней на единицу и сбрасывает состояние игры, когда последний мяч достигает нижней части экрана. Функция игры: OnBoundaryHit (мяч) если (self.NumBalls >= 2), то -- Удалить лишние шары Я: Удалить Мяч (Мяч); еще Настройки: AddLife(-1); -- Сбросить состояние игры, если все жизни были использованы если (Настройки.Жизни < 0) то Я: OnSceneLoaded(); еще -- Сброс положения весла/мяча Я: СбросПозиций(); конец конец конец -- Вызывается при разрушении кирпича. Шанс создать дополнительный шар. -- Удаляет кирпичи со сцены и увеличивает счет игрока. Перезапускает уровень, если все кирпичи уничтожены. Функция игры: OnBrickDestroyed (Кирпич) -- Обновить счет Настройки: AddScore(10*Settings.Level); -- Дополнительный шанс мяча местный чанce = Brick.MaxHealth/Settings.MaximumLevel; местный рулон = math.random (0, 100); если (бросок/100 <= шанс), то self:AddBall(0, -1,75, 4+Settings.TotalSpeedIncrement, Settings.Delay); конец -- Удалить кирпич сам: УдалитьКирпич(Кирпич); -- Проверяем, пройден ли уровень если (self.NumBricks == 0) то Я: НаУровнеЗавершено(); конец конец -- Вызывается при попадании в кирпич. -- Повреждает блок и обновляет его цвет. Также увеличивает счет игрока. Функция игры: OnBrickHit (кирпич) -- Обновить счет Настройки: AddScore(10*Settings.Level); -- Изменить цвет кирпича местное Здоровье = Кирпич.Здоровье-1; если (Здоровье > 0), то Brick.Color = Color.__new(BrickColors[Health][1]*Settings.ColorMultiplier, BrickColors[Health][2]*Settings.ColorMultiplier, BrickColors[Health][3]*Settings.ColorMultiplier); конец Кирпич:Урон(1); конец -- Сбрасывает настройки и запускает игру. функция Game:OnSceneLoaded() Настройки: Сброс(); я: Старт(); конец -- Обновляет все объекты UIText. функция Game:OnUIUpdate() LevelText.Message = "УРОВЕНЬ: " .. Настройки.Уровень; LivesText.Message = "ЖИВЫ: " .. Настройки.Жизни; ScoreText.Message = "SCORE: " .. Settings.Score; конец -- Следующие команды регистрируют обработчики событий для различных событий, вызываемых в Unity. RegisterEventHandler("BoundaryHit", "OnBoundaryHit", Game); -- Обратный вызов для события BoundaryHit. RegisterEventHandler("BrickDestroyed", "Вкл.BrickDestroyed", Game); -- Обратный вызов для события BrickDestroyed. RegisterEventHandler("BrickHit", "OnBrickHit", Game); -- Обратный вызов для события BrickHit. RegisterEventHandler("SceneLoaded", "OnSceneLoaded", Game); -- Обратный вызов для события SceneLoad. RegisterEventHandler("UIUpdate", "OnUIUpdate", Game); -- Обратный вызов для события UIUpdate.

Как скачать uLua Paddle Game через торрент

Всего несколько простых шагов:

  • Устанавливаем программу μTorrent, через которую мы будем скачивать торренты
  • Выбираем и скачиваем подходящий торрент-файл репака uLua Paddle Game
  • Двойным кликом открываем скаченный файл, программа μTorrent запустится автоматически и предложит выбрать место для сохранения дистрибутива.
  • После того как репак скачается, запускайте его. Начнется установка и... это все, приятной игры!