Pull to refresh

Comments 32

Соискатели, которых мы собеседовали, неплохо знали Unity, но плохо – C#.
«Неплохо знали Unity» означает, что умеют в визуальный редактор?
Закрытая платформа. При возникновении проблем, решение которых зависит от Unity, у вас нет других вариантов, кроме как ждать нужного релиза.
Не совсем правда. У них можно попросить внутренний билд, если не боитесь. Плюс, у них разработчики некоторые идут на контакт с радостью, так что проблему можно прям с ними обсудить.

«Неплохо знали Unity» означает, что умеют в визуальный редактор?

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

Как было сказано выше в статье, у нас с Unity партнерские отношения, мы работаем с техподдержкой уровня Enterprise. Однако, с внутренним билдом часто возникают технические сложности, поэтому нам проще подождать релиза.
Вот и мы ждали-ждали, вышла 5.5.0, а там кое-какие вещи сломались. Заметили это уже после апдейта в сторах =/
Напишите пожалуйста какие конкретно вещи сломались в вашем случае
Там кое-какие щейдера поломались.

Но, что самое неприятное, странные вещи со скейлом произошли. Мы в этом месяце запустились на Facebook Gameroom, и вот там, в случае, когда игрок скейлит сам клиент перед запуском игры, нормально скейл не отрабатывает, координаты тачей ломаются, и перестаёт клавиатура работать. Плюс странная пикселизация наблюдается.
На самом деле интересно, и надеюсь что вторая часть действительно будет.
Плюс — интересно какой ЯП использовали для сервера?
На сервере используется С#, соответственно у нас есть возможность частично шарить код между сервером и клиентом.
Оу. У нас в игре тоже сервер на Юнити, что позволяет очень много кода шарить с клиентом. А можете поделиться информацией о перформансе сервера?

Плюс, что более интересно, как управляете серверными инстансами? И т.п.
Вы неправильно поняли: сервер у нас как раз не на Unity. Информацию по серверу можно прочитать в наших материалах от Павла Матлашова тут и тут.

Должен заметить такого рода статьи от Плариума радуют, очень мало в сети инфы о работе крупных проектов.

Спасибо! Следите за обновлениями, впереди еще как минимум 5 статей о разработке этого проекта.
Если не затруднит, можно примеры кода?
Примеры какого именно кода интересуют?
Пример вот этого:
Далее указывается путь к Property в ViewModel в строковом виде, с которой GameObject должен связаться.
При Awake биндинг через ContextBox ищет в Context нужную ему Property по пути и, если находит, подписывается на её изменения.
При изменении значения Property во ViewModel UI тут же реагирует на эти изменения и отображает их в ассоциированной Label.
Если вас интересует реализация этого механизма, то показать мы его, к сожалению, не можем. Как и говорится в статье, для поиска необходимых Property используется рефлексия.

Пример использования Property в Context выглядит как-то так:

public class AlertPopupContext : Context<AlertPopupContextState>
{
    public readonly StringProperty Message = new StringProperty();
    
    protected override void Set()
    {
        Message.Set(State.Message);
    }
}

В UnityEditor в биндинге, который лежит в иерархии префаба AlertPopup, путь задаётся так как на картинке ниже, в соответствии с именем переменной.


Те в случае вычисляемых полей при множественных зависимостях и при последовательном изменении значений этих зависимостей в одном обработчике у вас лейбл будет перезаписан несколько раз с соответствующими gc memory allocation на строках?
Хорошее замечание, если мы вас правильно поняли. Чтоб этого избежать, мы собираем все изменения и выполняем только самое последнее в конце кадра.
А как производится вычисление составного поля? Например «прогресс 10 / 100», когда требуется несколько зависимых полей. Это решает дата-провайдер, получается, какую строку в какой виджет отдавать?
Я как-то использовал для NGUI штуку под названием NData. Где-то видел и под новый ui.
Вы взаимойдествуете с сервером по протоколу http? Никаких сокет-соединений? Что ж это за реалтайм такой, опишите подробней?
http с keep-alive, по сути, тоже самое, что и raw socket. Только лишних заголовков много. Если сообщения отправляются только в одну сторону, то вполне жизнеспособно.
WWW в юнити (а в статье указан именно он) раньше принудительно вырезал keep-alive и еще кучу заголовков, как сейчас — без понятия, но не думаю, что поведение сильно изменилось. Возможно новый вебреквест из HLAPI уже умеет такое.
Мы для запросов к API используем UnityWebRequest с keep-alive. Работает отлично. Основное соединение с сервером через LLAPI. С WWW и других проблем много было. Благо сейчас есть хорошая замена.
Вы видимо не доконца прочитали, в статье написано так:

Все команды являются обертками над HttpWebRequest и выполняются асинхронно (Asynchronous Programming Model). Для WebGL-билда команды являются обертками над Unity WWW классом, который выполняется через корутины. Для коммуникации с сервером данные сериализуются в JSON-формат.
Так это не я не до конца прочитал, видимо. Еще раз тезисы: WebGL, WWW, нет поддержки Keep-Alive. Речь не про UnityWebRequest из новой сети, а про старый WWW — это 2 разных подсистемы.
Вы первую часть осознанно игнорируете?

Все команды являются обертками над HttpWebRequest


Stormfall: Rise of Balur — мобильная игра.
Эээ, еще раз прочитал — так вообще получается муть написана — javascript-обертки над браузерным HttpWebRequest нужны как раз только для WebGL (и будут работать только в нем). В чем смысл второй половины про WWW + коротины в WebGL?
На сколько я понял HttpWebRequest для мобильной вресии игры, а WWW для WebGL.
Да, на https с long polling для некоторых запросов. Одна из следующих статей в этом цикле будет посвящена как раз работе с сервером, там будет все расписано подробнее, так что следите за обновлениями :)
Спасибо за цикл статей, очень интересно читать. Интернет наполнен туториалами для новичков, но вот таких действительно полезных статей, о том, как что устроено в реальном проекте — единицы. Есть вопрос про механизм биндингов: если в процессе рефакторинга кода решили переименовать у Tab поле Name в, допустим, Title, то как найти все GameObject-ы, которые подписаны на это поле, чтобы в строке-пути до Property тоже поменять на Title? Есть ли возможность делать это автоматически?
Возможность сделать это автоматически есть, но это нетривиальная задача. Мы заметили, что рефакторинги с переименованиями происходят нечасто, а если и происходят, то вместе с пересборкой UI, в котором заодно и правятся пути.
Sign up to leave a comment.