Unity, FixedUpdate и Update
Вот, норм статья где всё четко, английским языком написано почему c физикой надо работать в FixedUpdate, а не в Update. Понятные анимации, графики, сниппеты и комментарии. Рекомендую к прочтению, тем кто не в курсе.
Вот, норм статья где всё четко, английским языком написано почему c физикой надо работать в FixedUpdate, а не в Update. Понятные анимации, графики, сниппеты и комментарии. Рекомендую к прочтению, тем кто не в курсе.
Обновлено 16.05.2019
Свершилось. В новой версии Unity 2019.1 допилили поле ввода (InputField) в TextMeshPro.
Теперь дополнительное поле ввода не появляется на iOS и Android! Мой UnityMobileInput не особо-то и нужен, всё можно сделать «штатными» компонентами и оно будет работать как надо, вроде :) Там же есть и поддержка эмоджи.
Рано радовался, определять высоту экранной клавиатуры юнитеки так и не научились... Всё равно придётся использовать костыль, хоть и меньшего размера :)
Задумал я тут выложить на Github свою очередную поделку — простой сервер на Node.js и клиента к нему на Unity. Много раз сам гуглил различные библиотеки, пробовал, тестировал, пытался сам написать что-то (с моими познаниями в Node.js :), но потом подсмотрел как сделано у старого китайского Pomelo, который уже сто лет не поддерживается.
Если честно, когда я первый раз узнал про Pomelo и начал его изучать, то понял, что для моих текущих задач такой функциональности не требуется, поэтому решил выпилить всё что не нужно. В итоге, осталось вот что:
Опыта в Node.js у меня не очень много, поэтому я нагуглил такой фреймворк — Architect. Не знаю насколько это оправдано, но пока сделано с помощью него.
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
}
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.
Недавно в Steam вышел новый Зомботрон. Если кто не играл в предыдущие части на флеше, то многое потерял :) Это 2D экшн про зомби, монстров и пришельцев с кучей оружия и взрывов. Поиграть в предыдущие части можно на официальном сайте.
В этот раз разработчик делал игру 3 года, один, на Unity. Издателем выступил Armor Games. Да, этот тот старый сайт с кучей флеш игр :)
У автора есть отличный сайт на котором он пишет (редко) про разработку, нового Зомботрона и другие свои игры. Есть что почитать. Ещё давно прочитал его перевод серии статей про многопользовательские игры. Ещё есть группа в ВК. Там же можно найти интересные заметки, например, про систему выпадения случайных вещей.
Не буду копипастить все изменения (их очень много), смотрите запись в официальном блоге Unity. Как всегда, после крупного релиза будут выходить фиксы. В любом случае, качать надо :)
Уже довольно долгое время я пользуюсь VS Code и он, до сих пор меня не разочаровал :) Это отличный быстрый редактор с кучей разнообразных плагинов. Для работы с Unity использую вот эти:
В общем-то, нет смысла придумывать сложное описание, обычный дебагер и он работает. Можно конечно отлаживать и через Debug.Log :) Можно, но не нужно.
Эта штука must have, сколько времени она сэкономила сложно посчитать. Форматирует C# код со всеми отступами и переносами. Товарищ Leopotam постарался.
Плагин для генерации XML комментариев, нужно ввести только 3 слеша и IntelliSense всё расскажет о методе или классе.
Это не плагин, а тема оформления. Приятная цветовая гамма в пастельных тонах, для любителей тёмных тем.
Плагин с коллекцией Unity сниппетов. Позволяет быстро сгенерировать метод с параметрами.
А ещё, я поставил себе шрифт Fira code с лигатурами. Нраица.
Визуального программирования не будет, обещали к 2019.2, будет в 2020.1
На Пикабу добрый человек раздаёт свою коллекцию книг по разработке игр, в PDF.
Unity делает новый физический движок. Даже два :) Первый — Unity Physics, который будет дефолтным, с открытым исходным кодом, на C#. Второй — Havok Physics от Microsoft, платный. На хабре можно почитать статейку.
Call of Duty: Mobile сделала на Unity. Уже идёт пре-регистрация для андроида.
В Unity будет AR Foundation — объединенный API для упрощения разработки AR приложений и игр.
Неплохие анонсы надо заметить, будем надеяться, что нововведения не приведут к новым лагам в неожиданных местах :)
Adaptive Performance в Unity. Новая фича которая будет работать начиная с Samsung S10. Как я понял, «картинка» будет подстраиваться в зависимости от мощности устройства, чтобы не было лагов.
Unity будет поддерживать гугловскую игровую платформу — Stadia. Играть можно будет на любых устройствах, хоть с телевизора и из ютуба. Даже геймпад свой выпустили. Что это такое и как оно работает, на хабре. Если коротко — не всё так радужно.
Unity купила Graphine. Это разработчик ПО визуализации текстур в реальном времени. Позволяет использовать UHD текстуры, сжимать их и оптимизировать время загрузки.
DOTS. Unity подтягивает свои инструменты под одну технологию, data-ориентированную. Там и ECS, и C# Job System, и Burst Compiler. Havok тоже будет работать так. Ещё одна статья (перевод) на хабре.
Ну и чтобы два раза не вставать — исходники демки MegaCity. Развлекайтесь.
На GDC 2019 показали новое видео возможностей движка Unity: The Heretic. Выглядит оч круто. Позже напишу выборку, что ещё интересного анонсировали.