ROBLOX — Советы

Поделиться...

Используйте чужие решения

Изобретение велосипеда дело хорошее, как и хождение по граблям. Но всегда можно использовать грабли по назначению. Например, вы можете всегда и как угодно использовать предоставленную информацию и скрипты с данного блога.

Разрешаю. Согласно MIT license 

Комментируй код

  • создавай описательный заголовок у каждого скрипта в его начале
  • создавай описательный заголовок каждой функции прямо перед ней
  • комментируй каждое множественное условие
  • комментируй заковыристую строчку кода, если потратил на неё более 10-15 секунд
  • в идеале комментируй каждую строчку кода

Сегодня ты помнишь что и как сделано, а завтра? Завтра добавлено ещё десяток строк. Послезавтра ещё десяток строк. Потом на месяцы ты забываешь об этом скрипте. За это время ты написал ещё десятки скриптов и сотни строк кода. И вдруг тебе надо его изменить или дополнить? Скорее всего ты уже не будешь помнить, что и как работает в данном скрипте. Да и он ли тебе на самом деле нужен?

Храни скрипты в правильном месте

  • Если это разовые скрипты, то создай папку скриптов в workspace и храни их там.
  • Если скрипт работает всю игру определись где ему лучше быть: в workspace или в ServerScripts?
  • Если скрипт используется более одного раза подумай о том, чтобы запихнуть его в модуль и хранить в ServerScripts или ReplicatedStorage
  • Если это скрипты обрабатывающие модели (например поведение мобов или снарядов), то создай для них отдельную папку в ReplicatedStorage и храни там, а не в самих моделях
  • LocalScripts— нужны для работы на стороне игрока — в основном для работы с интерфейсом. Не пытайтесь их использовать для глобальных скриптов
  • Все расчёты характеристик, повреждений, бонусов, дропа должны производиться исключительно в серверных скриптах (частично спасёт от хакеров) не доступных на стороне клиента

Объекты

  • Определись с папками для хранения объектов — разовые отдельно, постоянно клонируемые отдельно
  • Объекты это не только модели это ещё скрипты, папки с параметрами, наборы эффектов, куски GUI — вообщем всё, что можно взять в одном месте и добавить в другом
  • Группируй объекты сперва по назначению, а уже потом по типу
  • В скриптах используй ссылки на объекты объявляя их заранее (или определяя их положение в общем контексте)
  • Assets предполагает непосредственное использование в проекте, в то время как модели в маркете — ещё и возможность поделиться ими, а то и продать (кому они там нужны?)

Модель из маркета

  • Обезглавь модель взятую из маркета — отключи (Disabled=true) все скрипты (не придётся искать причин странного поведения), а по возможности удали их из модели (избавишь себя от всяческих зловредов)
  • Если есть стоящие скрипты поведения, то подумай о их переносе в ReplicatedStorage или о том, чтобы запихать их в модуль
  • Присмотрись — может имеет смысл сгруппировать куски Part объектов в Model, а то и вообще в Union?
  • Проверь, чтобы у модели не было чего либо за пределами его необходимого размера (или торчит какой-нибудь Part из общей картинки)
  • Почти всегда можно, а то и нужно доработать модель до своего представления её в игровом мире

Скрипт и Модуль из маркета

  • Всегда обкатывай модуль из маркета в пустом проекте
  • Перед использованием чужого модуля в своём проекте сделай локальную копию своего проекта
  • Старайся не подключать модуль по ссылке в маркете (через require), используй его скачанный (и подключенный в пустой проект) вариант. Это избавит от массы головной боли. В том числе и на этапе отладки
  • Объект по ссылке может быть удалён автором, ограничен в доступе или испорчен — это угробит весь проект

GUI игрока

  • Не забывай делать интерфейс резиновым (Scale наше всё!)
  • Модули создания резинового интерфейса не обязательны. Достаточно после добавления элемента GUI задать ему относительный размер и позицию (0.1, 0, 0.1, 0) и после этого можно спокойно с ним работать — размеры и положения всегда будут относительными.
  • Для резинового интерфейса не забывайте ставить галочку TextScaled для текстовых полей. Иначе ваши тексты будут гулять при изменении разрешения экрана или при переводах на другие языки.
  • Скрипт реакции на кнопку размещайте под кнопкой. Не выносите в какой-нибудь общий скрипт.
  • Когда GUI должно выдать информацию по объекту — добавьте рядом переменную ObjectValue и помещайте в него ссылку на объект, а не передавайте имя объекта.
  • Имейте ввиду — Disabled у скриптов работает как «Выключить» и «Запустить с начала». Это прекрасно можно использовать в GUI и не только.
  • Если вы хотите чтобы какие-то элементы были всегда поверх других, то разместите их в отдельном ScreenGui с большим номером DisplayOrder.
  • Если вам надо попасть в область занятую системными кнопками, то установите IgnoreGuiInset у ScreenGui.

Отладка наше всё

  • Если что-то идёт не так как задумано вставляй print(«Переменная=»,переменная) в местах вызывающих сомнение до и после кода вызывающего вопрос
  • Помни, что можно выводить сообщения не только через print, есть ещё и warn() и error(). Ими можно отметить вывод в особо важных (щепетильных) местах.
  • Если что-то и правда не так работало, не забудь добавить комментарий и оставить один закомментированный print на будущее там, где действительно была ошибка
  • Если выдаются ошибки в окне исполнения, обращай внимание на все строки кода, что там указаны (в том числе и на функцию, которая вызвала функцию, в которой произошла ошибка)
  • Если вчера всё работало, а сегодня сыпятся ошибки — это не всегда значит что вы где-то напортачили. Вполне вероятно, что Roblox сделал какое-то исправление и.. что-то поломал. Поищите на devforum.roblox.com — возможно кто-то уже описал ошибку и там есть временное решение. Или.. отдохните часок, денёк другой…

Резервные копии

  • Не надейся на откат версии на сайте Roblox
  • Создавай локальные копии с индивидуальным именем перед началом редактирования в новом дню (ИмяПроекта_ГодМесяцДень_ТекущееВремя)
  • Сохраняй локально проект после отладки большого куска под старым и с новым именем (новые изменения уже пойдут в новое имя)
  • Если считаешь что исправление завершено — сохрани проект в Roblox и с новым именем локально.

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

Монетизация

  • Всегда используй все варианты монетизации
  • Всегда предлагай хоть мизерный (а то и просто визуальный) бонус для игроков с подпиской
  • Всегда предлагай игрокам без подписки возможность её приобретения
  • Gamepass на всегда, а Product — на сессию, а то и просто разовое приобретение
  • Gamepass всегда должны быть в несколько раз дороже внутри игровой покупки той же характеристики
  • Храни внутри игровые покупки (данные о них) в Players. Characters полностью удаляется и создаётся заново при респавне игрока (например при его смерти).
  • Для внутри игровых покупок разделяй в интерфейсе сессионные покупки и разовый бонус.

Публикация

  • Не спеши публиковать новую версию — возможно в ней есть ошибки ломающие геймплей
  • Используй тестовый Place для обкатки с друзьями — коллегами новой версии игры
  • Только убедившись в том, что в тестовом режиме ничего не сломалось можно публиковать игру в Place общего доступа

Локальный бардак

  • Храните каждый проект в отдельной папке
  • В каждом проекте создайте отдельные папки для разнотипных ресурсов (модели, рисунки, звуки…)
  • Создавайте папку Old куда будете перекидывать устаревшие копии ресурсов и проекта (лучше Old иметь в каждой папке)
  • Модели и их текстуры с материалами храните вместе
  • И не забудьте про папку хранения документации и блок-схем алгоритмов и принципов самого проекта и его отдельных частей

Бонус

Есть такая штука — блок-схема. Они очень помогают в представлении глобальном и детальном текущего проекта в физуальной форме. Лично я использую для этого yED. У него есть огромный минус — отсутствие русского языка в интерфейсе. Зато полностью бесплатный и умеет автоматически переставлять блоки на форме.

https://www.yworks.com/products/yed

Оптимизация

  • Если много уничтожаемых со временем объектов — не используйте Debris(). Использование Wait(time); Object:Destroy(). Это сбережёт массу ресурсов.
  • Добавьте ещё один Place. Тормозов может стать гораздо меньше! Странность реализации Roblox.
  • Используйте модули по максимуму. И модули в модулях. Поможет размножить логику, если у вас несколько Place.
  • Если есть возможность поместите GUI внутрь модуля.

Поделиться...

ROBLOX — Советы: 2 комментария

  1. Guest

    Годно, Александр Васильевич, очень годно! Скажите, а что значит «добавьте ещё один плейс»? Вы не знаете, можно ли в роблоксе сделать что-то типа рендера в текстуру? [Например, Я хочу сделать, чтобы у охраны были мониторы, которые показывают что творится в том месте, где расположены камеры наблюдения.]

    1. Admin Автор записи

      1. Добавить ещё плейс — в опубликованной игре можно создать несколько плейсов — территорий или отдельных локаций.
      2. Рендера в самой студии нет. Это можно делать только в 3Д редакторах (Blender например) и уже потом импортировать.
      3. Добавление мониторов это… отдельная песня по работе с камерами. Видел пример подобного — система дверей-телепортаций в которых было реализовано подобное.

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

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