Я создаю конкурентную многопользовательскую карточную игру, используя Unity Engine и C#. Основная функциональность уже готова, и сейчас я занимаюсь реализацией системы анимации. Не вдаваясь в подробности, пошаговый многопользовательский режим достигается за счет https-запросов от игрового клиента к веб-API. В игре каждый клиент делает последовательные запросы, которые отправляют код изменения в конечную точку, а затем сервер отвечает, чтобы сообщить клиенту, актуален ли его код изменения. Если это не так, клиент затем делает запрос на получение нового GameState. После сопоставления GameStateDTO с объектом C# клиент анализирует объект и переформатирует данные из формата, подходящего для БД, в формат, способствующий восстановлению игрового поля на клиенте.
Перед реализацией системы анимации клиент мгновенно реконструировал игровое поле на основе нового GameState, в результате чего карты мгновенно телепортировались на свои новые позиции. Чтобы реализовать систему анимации, я создал абстрактный базовый класс AbstractAnimator, а затем написал конкретные аниматоры для каждого эффекта карты и других событий (например, смены хода от одного игрока к другому). AbstractAnimator и его конкретные реализации не являются MonoBehaviours, поэтому они создаются по мере необходимости, активируются, а затем удаляются из памяти.
Мой вопрос касается того, каким образом конкретные аниматоры вызывают задержку, позволяющую воспроизвести анимацию до реконструкции игрового поля. Поскольку это не MonoBehaviours, я использовал System.Threading.Tasks вместо сопрограммы. Затем аниматоры вызывают различные классы MonoBehaviour по мере необходимости для запуска анимации, а после завершения задержки анимации аниматор вызывает обновление игрового поля.
Признаюсь, я' Я не испытываю никаких проблем с моей текущей реализацией, но после дополнительных исследований этого способа достижения асинхронной задержки большинство источников, которые я нашел, сказали, что не рекомендуется использовать эту библиотеку в проекте Unity, и вместо этого используйте сопрограмму. Если понадобится, я мог бы переработать эту систему так, чтобы эти аниматоры вызывали MonoBehaviour, вызывая задержки, но я бы очень признателен за дополнительные разъяснения плюсов и минусов моего текущего подхода. Я бы предпочел не менять систему, если для этого нет веской причины. Обратите внимание, что в конечном итоге я бы хотел, чтобы это приложение работало на настольных компьютерах, WebGL и Android, если это вообще имеет значение.
Как уже упоминалось, ранее я провел небольшое исследование этого вопроса. к написанию этого поста, и хотя я нашел некоторые упоминания о том, что это не идеальный подход, мне не удалось найти удовлетворительной информации, объясняющей, почему это так и какие могут быть последствия.
Пример одного из самых простых аниматоров:
Подробнее здесь: https://stackoverflow.com/questions/791 ... ve-a-delay
Есть ли какие-либо проблемы с использованием System.Threading.Tasks для достижения задержки без блокировки основного пот ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение