Избранное

Все заметки

GitHub icon Github

Buffer icon Проекты

Обо мне

49 заметок с тегом

разработка

Сервер на Node.js и клиент на Unity

Задумал я тут выложить на Github свою очередную поделку — простой сервер на Node.js и клиента к нему на Unity. Много раз сам гуглил различные библиотеки, пробовал, тестировал, пытался сам написать что-то (с моими познаниями в Node.js :), но потом подсмотрел как сделано у старого китайского Pomelo, который уже сто лет не поддерживается.

Если честно, когда я первый раз узнал про Pomelo и начал его изучать, то понял, что для моих текущих задач такой функциональности не требуется, поэтому решил выпилить всё что не нужно. В итоге, осталось вот что:

Опыта в Node.js у меня не очень много, поэтому я нагуглил такой фреймворк — Architect. Не знаю насколько это оправдано, но пока сделано с помощью него.

  • многопользовательский сервер для нереалтаймовых игр
  • отправка и получение команд и запросов (аналог JSON RPC)
  • поддержка SSL
  • основная часть на Architect
  • простое добавление команд: один файл = одна команда
  • работает с MongoDB

Команды (события)

public void TestCommand () {
    JsonObject param = new JsonObject();
    param["param"] = "value";
    _connector.Command("test-cmd", param);  
    // _connector.Command("test-cmd");     // without params
}

Чтобы «слушать» команды с сервера надо подписаться на команду (событие):

public void TestCommand () {
    _connector.On("test-cmd", OnTestCmd);  
    // _connector.Off("test-cmd", OnTestCmd);     // unsubscribe
}

void OnTestCmd (JsonObject result) {
    if (_connector.IsError (result)) {
        // handle error
        return;
    }
    // handle result
}

Запросы (RPC)

public void TestRequest () {
    JsonObject param = new JsonObject();
    param["param"] = "value";
    _connector.Request ("test-rqt", param, (result) => {
        // handle answer
    });   
    // _connector.Request ("test-rqt", OnTestRequest);          // without params
    // _connector.Request ("test-rqt", param, OnTestRequest);   // callback in external method
}

void OnTestRequest (JsonObject result) {
    if (_connector.IsError (result)) {
        // handle error
        return;
    }
    // handle result
}

На RPC запросы с сервера можно подписаться также как и на обычные команды. Отличие в том, на них надо обязательно «отвечать».

На сервере каждая команда находится в отдельном файле и экспортируется, как-то так:

module.exports = function (commander, message, imports) {
    if (!validate(message.data, commander.protocol.log)) {
        commander.sendError(message, "invalid_data");
        return;
    }
    ...
    commander.sendResponse(message, { result: "ok" });
};

Протокол сообщений можно легко переделать, добавить шифрование или свой какой-то формат, можно посмотреть в репе Pomelo, у меня будет также примерно.

Для создания простой многопользовательской онлайн игры — этого достаточно. Это будет такая демка, когда можно взять сервер и клиент, запустить и сразу увидеть как оно работает. Код будет полностью доступен, так что умеющие в Node.js и C#, смогут переписать мои «костыли» на свои :)

После тестирования и «боевой» проверки на игре, если всё получится, думаю сделать небольшой курс, где опишу, как на основе такой базы делать несложные онлайн игры. Но замечу ещё раз — НЕ реалтайм!

Stay tuned.

 Нет комментариев    9   12 дн   js   nodejs   unity   проекты   разработка   с#

Плагины VS Code для Unity

Уже довольно долгое время я пользуюсь VS Code и он, до сих пор меня не разочаровал :) Это отличный быстрый редактор с кучей разнообразных плагинов. Для работы с Unity использую вот эти:

Debugger for Unity

В общем-то, нет смысла придумывать сложное описание, обычный дебагер и он работает. Можно конечно отлаживать и через Debug.Log :) Можно, но не нужно.

C# FixFormat

Эта штука must have, сколько времени она сэкономила сложно посчитать. Форматирует C# код со всеми отступами и переносами. Товарищ Leopotam постарался.

C# XML Documentation Comments

Плагин для генерации XML комментариев, нужно ввести только 3 слеша и IntelliSense всё расскажет о методе или классе.

eppz! (C# theme for Unity)

Это не плагин, а тема оформления. Приятная цветовая гамма в пастельных тонах, для любителей тёмных тем.

Unity Code Snippets

Плагин с коллекцией Unity сниппетов. Позволяет быстро сгенерировать метод с параметрами.

А ещё, я поставил себе шрифт Fira code с лигатурами. Нраица.

 Нет комментариев    1   1 мес   plugin   unity   инструменты   разработка

SslStream не работает в Unity с .NET 4.x

Случайно обнаружил баг с SSL: на Android и iOS (на других не проверял) некорректно срабатывает конструктор SslStream. Появляется ошибка:

Unable to find libc

Актуально для всех последних версий Unity, где есть .NET 4.x. Если переключиться на .NET 3.5 (который deprecated) — всё работает, как должно.

Надеюсь скоро починят :(


В тему про SSL: этот генератор SSL самоподписных сертификатов, я уже упоминал в заметке про SSL в Unity, недавно автор по моей просьбе немного обновил его — теперь можно генерить сертификаты с дополнительными параметрами, например, subjectAltName и добавлять туда IP адреса :)

 Нет комментариев    3   4 мес   android   ios   unity   разработка   с#

Прогнозирование физики в Unity

На Хабре недавно был перевод статьи, про прогнозирование физики с использованием Physics.Simulate(). Интересное решение, которое вполне можно попробовать применить на каком-нибудь несложном проекте.

В примере показаны разные варианты обработки, с задержками и сглаживаниями. Вот например, как выглядит «сбой детерминированности»:

А вот конечный результат работы алгоритма:

На Github есть все исходники, с примером эмуляции сервера. Также, в комментариях к оригиналу статьи, на сайте автора, развернулась интересная дискуссия.


А ещё, в новой версии 2018.3 теперь можно симулировать не все физические объекты, а только объекты в нужных сценах. При загрузке или создании сцен, можно указать параметр (LocalPhysicsMode), который позволяет создать отдельный физический мир, независимо от основного. Это открывает большие возможности. Вот пример, как это сделать.

 Нет комментариев    1   5 мес   unity   разработка   ссылки   физика

Обновление UnityMobileInput

Теперь высота клавиатуры считается правильно везде и экран не сдвигается вверх при появлении клавиатуры. Это на Android такая история была.

Зарефакторил много старого кода, убрал не нужное, добавил кастомный инспектор, все настройки поля теперь берутся из Unity UI компонента InputField, клавиатура не пропадает если переключаться между полями и другие мелочи.

Напомню, что в Unity есть один нюанс при работе с пользовательским вводом на андроидах — появляется дополнительное поле ввода над клавиатурой. Оно, в общем-то работает, но с ограничениями (нельзя выделять текст и другие нативные штуки) и занимает место.

Было
Стало

Вроде работает :)
UnityMobileInput

 Нет комментариев   6 мес   android   git   ios   plugin   проекты   разработка   с#

5 полезных ассетов и библиотек для Unity #3

Unity — Mulligan Renamer

Прокачанная тулза для переименовывания объектов в редакторе. Одновременная работа с множеством объектов, перечисление, добавление суффиксов, префиксов и т. д.

https://github.com/redbluegames/unity-mulligan-renamer

Unity-2D-Destruction

Ассет позволяет настраивать разрушение спрайтов в 2D, с применением физики. Выглядит интересно. Как в плане производительности — надо проверять.

https://github.com/mjholtzem/Unity-2D-Destruction

[Graphy] — Ultimate FPS Counter — Stats Monitor & Debugger

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

https://assetstore.unity.com/packages/tools/gui/graphy-ultimate-fps-counter-stats-monitor-debugger-105778

Editor Console Pro

Замена стандартной консоли в Unity. Поиск по логам, подсветка кода, настраиваемый интерфейс, экспорт в CSV, удаленный доступ. Вещь. Но платная.

https://assetstore.unity.com/packages/tools/utilities/editor-console-pro-11889

Unity-Script-Collection

Большая (обновляемая) коллекция ссылок на бесплатные скрипты и ассеты для Unity. Очень большой список, разбитый на категории. Есть что утянуть интересное. В закладки.

https://github.com/michidk/Unity-Script-Collection

 Нет комментариев    2   6 мес   unity   ассеты   инструменты   разработка

Обновил Infinite Scroll

Был у меня старый скрипт для бесконечных списков в Unity. Но там было одно ограничение — ячейки должны были быть одной высоты. Но сейчас это стало необходимо, поэтому пришлось переписать скрипт.

Теперь все ячейки могут быть любой высоты! Работает также быстро и с помощью одного скрипта.

Ссылка на Github

 Нет комментариев    7   8 мес   android   ios   unity   интерфейс   проекты   разработка   с#

Двойной слайдер на Unity

Понадобилось тут сделать двойной слайдер... И я не придумал ничего проще, чем использовать уже имеющиеся слайдеры, просто объединив два в один :)

Получилось как-то так:

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

Скрипт
Структура префаба

Исходники на Github

 Нет комментариев    1   9 мес   unity   интерфейс   разработка   с#

Клон Stack на Unity за час

Видео с канала Unity3d College, как сделать клона популярной игры Stack, за 1 час!

Вообще канал интересный, не всё конечно, но автор регулярно снимает видео на различные темы и попадаются вполне себе.

 Нет комментариев   10 мес   unity   видео   игры   разработка

Armory3D

Это игровой движок для Blender. Все модели, материалы, свет и прочее, идут из 3D редактора — полная интеграция.

Достаточно интересный инструмент. Он ещё в разработке, но уже много что сделано:

  • не нужно ничего никуда экспортировать/импортировать — всё уже в блендере
  • неплохая система рендера
  • физика
  • звуки
  • сеть
  • глобальное освещение на вокселях
  • поддержка нод: шейдеры, логика и т. п.

В основе всего этого, кроссплатфоменные Haxe и Kha

Естественно, в 2018 году, можно (и нужно) билдить под все основные платформы:

  • Android, iOS
  • Windows, Linux, Mac
  • PS4, Xbox One, Switch
  • HTML5
  • Ещё куча

Больше видео на канале в Youtube.
Начиная с последней версии, движок стал бесплатным! Все исходники лежат на Github.

 Нет комментариев    5   11 мес   git   игры   инструменты   разработка   ссылки
Ранее Ctrl + ↓