Умное зеркало Smart mirror 2021: принцип работы и характеристики
Кажется, что у каждого устройства сегодня есть «умная» версия. Есть умные часы, умные телевизоры, умные холодильники, умные колонки и даже умные фонари. Давайте посмотрим на интересное умное устройство — Умное зеркало Smart mirror 2021: принцип работы и характеристики.
Умные зеркала могут стать незаменимыми помощниками в «Умном доме». В их функциональность входит оценка лиц пользователей, одежды и физического состояния. В качестве «начинки» Smart Mirror выступают камеры, Wi-Fi адаптеры и специализированное программное обеспечение.
Smart Mirror — это двустороннее зеркало со встроенным дисплеем за стеклом. Дисплей может отображать все, что вы хотите, на поверхности зеркала, например, текущее время, прогноз погоды, ленту новостей, предстоящие встречи и многое другое.
Также в устройстве есть датчик движения в ночное время суток, который отслеживает перемещение пользователя и освещает его путь, датчики освещенности, которые увеличивают яркость освещения, когда перед зеркалом стоит человек.
В гаджете применяется машинное зрение Intel RealSense, благодаря чему зеркало может определять пользователя и применять его индивидуальные настройки и предпочтения к характеру отображаемой информации.
Smart Mirror контролируется с помощью голосовых команд, благодаря голосовому помощнику или с помощью приложения Kohler Konnect.
Умные зеркала могут быть любого размера, от небольших настольных зеркал до зеркал для ванной комнаты. Умные зеркала иногда называют «волшебными» зеркалами, но они оба относятся к одному и тому же.
HiMirror — умное зеркало для красоты
Вы давно слышали об умных зеркалах, но можно ли их где-нибудь купить? На самом деле, нет. Вот загвоздка. До сих пор это было невозможно или проекты были только прототипами. HiMirror, пожалуй, одно из первых зеркал, запущенных в массовое производство.
Правильно подмечено что этот гаджет ориентирован в основном на пользователей женского пола. Устройство интересно тем, что действительно способно улучшить красоту, и не только с помощью отражающей опоры, которую женщины используют для правильного нанесения макияжа.
Зеркало HiMirror — это продвинутая помощь в уходе за вашей красотой, благодаря поддержке веб-камеры и приложения с сопряженного смартфона. Вместе они служат руководством по нанесению макияжа, уходу за кожей и, как следствие, общему внешнему виду. Не только чтобы скрыть недостатки, но и избавиться от них, избегая действий, не очень добрых по отношению к телу. Вы имеете дело с 14-дюймовым экраном и веб-камерой с подходящей светодиодной подсветкой. В результате оценка лица достаточно точна.
Общая идея операции проста. Зеркало HiMirror фотографирует нас, и таким образом можно анализировать лицо: морщины, темные и красные пятна, тени или поры. Система должна отслеживать изменения с течением времени и указывать места, о которых стоит лучше заботиться и о которых лучше заботиться.
Таким образом, программа находит области, требующие улучшения, отмечает их как цели и помогает преодолеть или скрыть их. Возможно и то, и другое, что, конечно, лучше всего подходит для данной ситуации. С одной стороны, вы можете узнать о недостатках, а с другой стороны, узнать о шагах по их исправлению.
В комплект входит приложение для iOS и Android, благодаря которому вы можете просматривать записи на экране мобильного телефона, и в то же время вы будете получать уведомления с советами (например, о доливке жидкости или правильном отдыхе и регенерации). Кожу можно анализировать с течением времени, и можно наблюдать за прогрессом.
База данных программы содержит много информации и видеоуроков (техники ухода за кожей). Вы можете ввести используемые методы в своем профиле, и система укажет на ошибки. Есть даже поддержка прогнозов погоды, то есть УФ-индексов, влияющих на организм с течением времени. Вполне всесторонне.
Линия косметики, которую вы используете, также важна. Брендов очень много, так что интересно, как производитель HiMirror это воспримет. Однако предполагается, что зеркало будет неотъемлемой и важной частью целого. Без него не обойтись. Именно косметика влияет на наш организм. В зеркале есть своя система навигации по жестам рук, и все, наверное, по простой причине — не пачкать экран.
Выбранные языки также помогут гаджету использовать голос. У веб-камеры есть крышка, поэтому она не должна нарушать вашу конфиденциальность. Также стоит добавить, что в предложении компании есть интеллектуальные весы, которые можно сопрягать с зеркалом и приложением. Он работает так же, как и модели-конкуренты, то есть дает процент жира в организме и другие параметры веса.
Таким образом, зеркало также учитывает определенные факторы, связанные с фитнесом. Он будет отображать информацию на своем экране, но пользователи все равно предпочтут сосредоточиться на красоте, т.е. заботиться о лице. Первое поколение может быть еще не самым совершенным, но набор функций кажется интересным. Женщины будут проводить перед таким зеркалом еще больше времени.
Что умеет умное зеркало?
Что делает Smart Mirror «умным», так это способность отображать на нем любую информацию. Умное зеркало можно настроить для отображения местных прогнозов погоды, сводок новостей, вашего предстоящего календарного расписания, каналов социальных сетей и т. Д.
Можно добавлять голосовые команды с помощью Amazon Alexa или Google Home Assistant. С помощью голосовых команд вы можете задавать вопросы зеркалу, устанавливать напоминания или управлять другими интеллектуальными устройствами в вашем доме.
В качестве примера того, на что способно умное зеркало:
Умное зеркало можно легко настроить так, чтобы оно содержало любую информацию, которую вы хотите. В Интернете есть много людей, создающих собственные модули и код, позволяющий умным зеркалам делать разные вещи.
Как работают умные зеркала?
Интеллектуальное зеркало состоит из трех компонентов: двустороннего зеркала, дисплея и компьютерного устройства. Давайте посмотрим на каждую часть и на то, как работает умное зеркало.
Двустороннее зеркало: обычное зеркало имеет пленку за стеклом, которая отражает 100% падающего света. Это означает, что когда вы смотрите в зеркало, вы видите свое отражение. Двустороннее зеркало отражает свет с одного направления, но позволяет свету проходить с другого направления.
Вы, наверное, видели двусторонние зеркала в фильмах в полицейских комнатах для допросов. В умных зеркалах используются двусторонние зеркала, позволяющие свету от дисплея проходить через зеркало.
Дисплей
За двусторонним зеркалом находится экран монитора / телевизор / планшет. Он используется для отображения любой информации или модулей для вашего интеллектуального зеркала. Дисплей может быть того же размера, что и зеркало, или меньше, чем зеркало.
Компьютер
Что-то должно запускать контент, который вы видите на своем умном зеркале. Небольшого компьютерного устройства, такого как Raspberry Pi, более чем достаточно для питания интеллектуального зеркала.
Тип необходимого вам компьютерного устройства зависит от того, что вы хотите от интеллектуального зеркала.
Преимущества умного зеркала
Как и многие другие умные устройства, трудно представить, насколько они могут быть полезны, пока вы ими не воспользуетесь. Большим преимуществом интеллектуального зеркала является возможность отображать полезную информацию без необходимости открывать приложения или что-либо делать.
Вы просто смотрите в свое умное зеркало, и информация там
Например, представьте, что зеркало в вашей ванной — умное зеркало. Каждое утро вы, вероятно, просыпаетесь и стоите перед зеркалом, чистя зубы или готовясь к новому дню.
Представьте, что пока вы занимаетесь утренними делами, вы можете смотреть в зеркало и видеть дорожную сводку, прогноз погоды на день и свой распорядок дня.
Возможность воспринимать всю эту полезную информацию, не прерывая свой обычный распорядок, очень раскрепощает. Вы можете настроить зеркало так, чтобы отображать все, что вам нужно.
Хотите новостную ленту по определенным темам? Легко. Хотите видеть движение цен на акции? Готово. Хотите, чтобы ежедневная цитата вдохновляла вас каждое утро на пробежку?
Большим преимуществом создания собственного интеллектуального зеркала являются модули и программное обеспечение, уже созданные другими людьми. Есть буквально сотни различных модулей, созданных другими людьми, которые вы можете использовать для своего умного зеркала.
Вы можете полностью настроить свое интеллектуальное зеркало, выбрав модули, которые хотите включить.
Отличный дом
Умное зеркало, которое у меня есть в ванной, — безусловно, самая обсуждаемая функция в доме.
Все, кто видит это впервые, всегда выбегают из ванной с широкой улыбкой на лице, потому что не могут поверить в то, что только что увидели.
Когда кто то входят в ванную комнату, датчик в зеркале немедленно включает светодиоды по краю зеркала, освещая всю комнату.
Когда человек подходит к зеркалу, умный дисплей включается, показывая все, что настроено на нем.
Некоторые говорят, что это придает дому ощущение футуризма. Благодаря этому ванная комната выглядит намного лучше, чем была раньше, и намного дешевле, чем при обычном ремонте ванной комнаты.
Функции Smart Mirror
Самое замечательное в создании собственного умного зеркала — это то, что вы можете настроить его под свои нужды.
Вот несколько идей о различных функциях, которые вы могли бы включить в свое умное зеркало:
Сложно ли построить умное зеркало?
Хотя это может показаться сложным, на самом деле создать умное зеркало очень просто.
В зависимости от того, какие функции вы хотите использовать в своем умном зеркале, вы можете полностью построить его за выходные или это может занять несколько недель.
Пошаговые руководства и статьи означают, что вам не нужно разбираться в программировании, чтобы создать интеллектуальное зеркало. Хотя умные зеркала появились совсем недавно, многие люди построили их за последние несколько лет.
Если вы всегда представляли свой дом более футуристическим, как в фильмах, создание собственного умного зеркала — отличный способ воплотить его в жизнь.
Умное зеркало своими руками
Кому нужно умное зеркало? Много кому. Я, когда такое увидел, тут же захотел выбросить наш календарь с маркерной доской. Майкл Тиув проделал потрясающую работу по созданию отличной расширяемой платформы для умных зеркал, которая позволяет всем желающим самостоятельно делать такие зеркала. Если вам эта тема интересна — загляните на сайт проекта MagicMirror.
Здесь я хочу рассказать о том, что нужно для проектирования и сборки собственного умного зеркала. Я, кроме того, коснусь тут и темы создания рамки для такого зеркала.
Для тех, кто раньше с умными зеркалами не сталкивался, опишу в двух словах суть проекта. За зеркалом, прозрачным с одной стороны, размещают монитор. При идеальном освещении всё, что на экране выведется чёрным, будет выглядеть как зеркало. А всё белое (или имеющее другой высококонтрастный цвет) будет просвечивать сквозь зеркало. Мне хотелось сделать нечто вроде информационной панели для всей семьи, на которую выводились бы календари, списки покупок, сведения о погоде. Я подумывал и о том, чтобы встроить в это зеркало AlexaPi (подробнее об этом я расскажу позже). Я заинтересовал жену рассказом о том, как это зеркало улучшит нашу жизнь и поможет быстрее справляться с делами, и принялся за работу.
Материалы
▍Стекло (зеркало)
Я воспользовался зеркалом Pilkington Mirrorpane. Оно оказалось самой дорогой частью проекта (200 канадских долларов). Я, читая разные материалы на тему умных зеркал, узнал, что хорошего эффекта люди добивались, используя плёнку, прозрачную с одной стороны, на акриловом стекле. В одной местной фирме мне отрезали подходящий кусок 6-миллиметрового зеркала Pilkington Mirrorpane. При правильном освещении оно отлично справляется со своей задачей. Если освещение оказывается слишком ярким, то картинку с монитора, который находится за зеркалом, видно хуже. Производитель рекомендует соотношение между освещённостью задней и передней части зеркала в 8:1. В таких условиях зеркало должно давать хорошие результаты. Кроме того, это зеркало имеет янтарный оттенок. Выглядит он приятно, но выбирая такое зеркало надо учитывать то, что изменить его цвет не удастся.
▍Дисплей
В качестве дисплея для этого проекта я использовал 39″ LED TV Insignia NS-39D400NA14. Стоит он 150 канадских долларов. Я столкнулся с проблемами, которые касались команд HDMI CEC для включения и выключения дисплея, но смог эти проблемы обойти (подробнее об этом я расскажу ниже).
▍Дерево
Я — столяр-любитель. Рамку для зеркала я сделал из того, что нашлось под рукой. Это была фанера, облицованная орехом. Дерева в этом проекте, на самом деле, не так много, да и облицовка из ореха особой роли не играет, но мне нравится работать с этим материалом.
▍Raspberry Pi 3
Плата Raspberry Pi 3 в подобном проекте пригодится тем, кто собирается пользоваться встроенным Wi-Fi-модулем. Подобные проекты делают и на основе Raspberry Pi 2, и даже на Raspberry Pi Zero.
▍Источник питания
▍USB-микрофон
SunFounder USB 2.0 Mini Microphone и удлинительный USB-кабель для него
▍Датчик движения
▍Светодиод
Здесь я использовал RGB-светодиод.
Части проекта, напечатанные на 3D-принтере
Те части проекта, которые надо напечатать на 3D-принтере, я, в основном, спроектировал сам. Ниже приведён список ссылок на соответствующие файлы. Вы можете свободно ими пользоваться.
Сборка компонентов
Вот как выглядит задняя часть зеркала, представленная дисплеем и другими компонентами.
Соединение компонентов проекта
Рамка для зеркала
Тут я хочу показать вам видео, посвящённое созданию рамки для зеркала. То, что у меня получилось, немного отличается от чертежей, с которых начиналась работа.
Создание рамки для зеркала
Настройка системы
Я не задумывал этот раздел как исчерпывающее руководство по настройке умных зеркал. Тут я расскажу лишь о самом главном. А именно, я установил Raspbian Stretch Lite, а потом следовал этому руководству.
Сначала я поэкспериментировал с множеством модулей для MagicMirror, созданных энтузиастами. А уже потом отобрал самое важное. Если вы будете идти моим путём, то советую хотя бы попробовать MMM-EyeCandy.
В итоге я установил следующие модули, которыми пользуюсь до сих пор:
Для того чтобы сделать этот скрипт исполняемым, воспользуемся командой chmod :
Потом надо настроить crontab :
В список заданий надо добавить следующую команду, которая будет запускать скрипт каждую полночь:
AlexaPi
AlexaPi — это потрясающий проект. Имеется и пара MagicMirror-модулей, созданных специально для работы с Alexa. Это — MMM-alexa и MMM-awesome-alexa. Мне очень хотелось, чтобы голосовой помощник Alexa оказался бы интегрирован с умным зеркалом, но с настройкой AlexaPi и соответствующих модулей MagicMirror возникло слишком много сложностей. Мне, кроме того, хотелось бы, чтобы помощник Alexa использовал бы отдельный светодиод. В итоге я просто установил AlexaPi, но не интегрировал возможности этого проекта в платформу MagicMirror. В ходе установки AlexaPi я пользовался этой инструкцией.
В моей AlexaPi-конфигурации используется недорогой USB-микрофон. Она, к сожалению, показывает далеко не самые лучшие результаты. Сейчас Alexa реагирует лишь на мужской голос. Возможно, ситуацию могут улучшить эксперименты с pocketsphinx или Snowboy. Ниже показана верхняя часть зеркала, на которой смонтирован светодиод и датчик движения.
Верхняя часть зеркала со светодиодом и датчиком движения
Автоматическое включение и выключение зеркала по сигналу от датчика движения
В моём списке возможностей умного зеркала был один крайне важный пункт: зеркало должно выключаться тогда, когда рядом никого нет. Модуль MMM-PIR-Sensor отлично справляется с этой задачей. Особенно — если дисплей, используемый в проекте, поддерживает все команды HDMI CEC. Тот телевизор, что стоит за моим зеркалом, по неизвестным причинам, поддерживает лишь команду, имеющую отношение к состоянию устройства. В результате я решил проблему включения и выключения телевизора с помощью GPIO Raspberry Pi (PIN 15), воздействуя на кнопку питания телевизора так, что устройство считает, что на неё нажимает человек.
Панель управления телевизором
После этого всё заработало так, как мне хотелось.
Основы Unity + Mirror
Хочу поделиться опытом с теми, кто хочет попробовать себя в написании сетевой игры, но не знает с чего начать. Так как информации по этой теме в интернете много, но полезную и актуальную было найти тяжело (а в русскоязычном сегменте и подавно), я решил собрать и структурировать то, что удалось найти.
Итак, для написания сетевой игры на Unity сейчас есть несколько вариантов:
UNet. Устаревшая сетевая технология. На данный момент deprecated и поддержка закончится в ближайшие пару лет. Но что же Unity предлагает взамен?
NetCode. Потенциально крутая технология, которая будет работать в связке с Entity Component System. Но очень уж медленно она развивается, за пару лет существования вышло 6 версий разной степени багованности, api постоянно меняется и делать что-то серьезное на нем пока рановато. Когда ее доделают – неизвестно. Я слежу за ней уже около года и особого прогресса не заметил.
Что тогда остается? Из бесплатных решений это:
MLAPI. Альтернатива UNet с широким спектром возможностей. Достойное решение, стоит к нему присмотреться.
Mirror. Доведенный до ума UNet, который потенциально может использоваться даже в MMO. Может работать как Клиент+Сервер, так и NoGUI-Сервер.
И платные решения (ознакомится с ними не удалось, напишите у кого был опыт как они):
Таблица преимуществ этих решений от Unity:
Мой выбор пал на Mirror, как на ближайший потомок UNet, использующий большинство принципов уже знакомого UNet. На примере простого проекта мы посмотрим основы Mirror, а именно:
NetworkMessage и spawn игрока в выбранной точке
Синхронизация переменных посредством SyncVar
Синхронизация переменных посредством SyncList
Spawn предмета и взаимодействие с предметом
1. Настройка окружения
Для начала нам нужно создать префаб игрока. Создаем пустой GameObject (назовем его Player), вешаем на него SpriteRenderer, задаем sprite Knob и масштабируем чтобы лучше его рассмотреть. Далее создаем скрипт Player.cs и вешаем его на тот же GameObject. Редактируем скрипт следующим образом:
Подробнее про NetworkBehaviour и NetworkIdentity
Компонент NetworkIdentity добавится автоматически при добавлении скрипта, наследуемого от NetworkBehaviour.
В одном GameObject (и всех его потомках) может быть только один NetworkIdentity.
Добавляем компонент NetworkTransform, чтобы положение нашего игрока синхронизировалось между всеми игроками. Ставим галочку ClientAuthority, чтобы изменения произведенные клиентом, считались валидными.
Подробнее про NetworkTransform
Компонент NetworkIdentity также добавится автоматически при добавлении NetworkTransform (если его еще не было).
Если вам нужно синхронизировать потомков, добавляйте NetworkTransformChild на тот же объект, где уже есть NetworkIdentity, и указывайте в Target тот transform, который нужно синхронизировать.
Делаем из нашего GameObject префаб. Получилось что-то такое:
Далее создаем скрипт NetMan.cs, создаем пустой GameObject (назовем его NetMan) и вешаем на него скрипт. Это будет наш скрипт, который отвечает за старт сервера и подключение игроков.
Пока просто наследуем класс от NetworkManager, на этом этапе этого будет достаточно.
У нас в инспекторе появятся настройки сервера и добавится компонент KcpTransport. Докидываем на тот же GameObject компонент NetworkManagerHUD (он создает необходимое для подключения GUI).
Остановимся подробнее на настройках:
Don’t Destroy On Load. Будет ли объект существовать между сценами?
Run In Background. Будет ли компонент продолжать работать когда окно программы неактивно?
Auto Start Server Build. Будет ли сервер стартовать автоматически, если была выбрана опция билда «Server Build»?
Show Debug Messages. По этой опции не удалось разобраться или найти какую-то информацию.
Server Tick Rate. Количество обновлений сервера в секунду.
Server Batching. Должен ли сервер сначала собрать текущую сетевую информацию и отправить ее в LateUpdate разом? Полезно для уменьшения нагрузки на CPU и сеть, но увеличивает задержку.
Server Batch Interval. Чем выше это значение, тем реже будет отправляться сетевая информация.
Теперь нам нужно указать префаб, который будет спавниться в качестве игрока. Перетаскиваем префаб Player в поле Player Prefab и после этого убираем его со сцены (оставляем только камеру и NetMan).
Первый этап готов. Выставляем выполнение в неполном экране (чтобы несколько экземпляров помещалось), делаем сборку, запускаем 2 экземпляра и проверяем. Один экземпляр стартуем как сервер, второй как клиент. На wasd двигаем своего персонажа, он успешно синхронизируется с другим экземпляром.
2. NetworkMessage и spawn игрока в выбранной точке
На примере спавна в выбранной точке мы научимся отправлять сообщения на сервер.
В настройках NetMan убираем галочку AutoCreatePlayer, дальше мы будем контролировать спавн игрока сами. Для этого мы изменим скрипт NetMan.cs. Начнем с создания struct с данными о позиции:
Далее создадим метод непосредственно спавна, который будет выполняется только на сервере:
Теперь перегрузим мтод OnStartServer (выполняется только на сервере) и добавим в него обработчик сетевого сообщения:
Создадим метод, который будет активировать спавн (и выполняться локально на клиенте):
И напоследок зададим условия для активации спавна:
В итоге получаем такой скрипт NetMan.cs:
Второй этап готов. Делаем сборку, проверяем. После подключения нужно кликнуть левой кнопкой мыши в точку, где игрок хочет засвапниться.
3. Синхронизация переменных посредством SyncVar
Переходим к очень интересной фиче – SyncVar. Она позволяет избежать ручной синхронизации данных. Главное правило – меняем переменную только на сервере и не используем ее как данные (только как временное хранилище для данных, которые нам нужно обработать).
Для начала подготовим объекты, которые мы будем использовать для наглядной синхронизации. Например, здоровье в виде красных кружков. Открываем редактирование префаба Player и добавляем ему несколько объектов, представляющих собой жизнь (Knob + красный цвет). Располагаем их так, чтобы было хорошо видно.
Редактируем скрипт Player.cs, добавляем переменные:
Сохраняем, закидываем объекты-жизни в переменную HealthGos и выставляем такое же количество в переменной Health.
Добавляем в Update обновление объектов-жизней в соответствии с количеством жизней:
И переходим к методу на клиенте, который будет выставлять Health в соответствии с синхронизированным значением:
Теперь нам нужно сделать метод, который будет менять переменную _SyncHealth. Этот метод будет выполняться только на сервере.
Далее переходим к методу, который также будет выполняться на сервере, но клиент сможет запросить его выполнение:
Подробнее про Command и Rpc
Command используется для того, чтобы клиенты могли попросить сервер выполнить заданную команду.
Rpc используется для того, чтобы сервер мог попросить клиентов выполнить заданную команду.
Command можно вызывать на сервере+клиенте, но Rpc нельзя вызывать на клиенте.
Передавать в Rpc и Command можно только ограниченный набор типов.
Вызов Rpc в режиме сервер+клиент также выполнится на нем самом.
Все готово для синхронизации, зададим условия изменения жизней. На этом этапе сделаем простую схему – каждый игрок может только уменьшить свои жизни. Для этого дополним Update:
Этап завершен. Теперь у игроков всегда будет актуальное количество жизней, даже у тех, кто присоединяется позднее (после изменения количества жизней у других игроков).
4. Синхронизация переменных посредством SyncList
Синхронизировать одну переменную это конечно хорошо, но для серьезных проектов нам понадобится инструмент посерьезнее. SyncList позволяет синхронизировать массивы данных. Разберемся с ним на примере сохранения пройденного пути по нажатию кнопки (просто для наглядности). Редактируем скрипт Player.cs по аналогии с SyncVar.
Изменение массива на сервере:
Команда для запроса с клиента на сервер:
И обработчик события изменения массива на клиенте:
Теперь перегрузим метод старта клиента:
Синхронизация готова, но нам нужно задать условия изменения массива и визуализировать данные. Создадим пустой GameObject + SpriteRenderer + Knob + меняем цвет. Сохраняем как префаб Point.
Добавим компонент LineRenderer на префаб Player, выставим ему ноль позиций и немного уменьшим ширину. Отредактируем скрипт Player.cs:
Как будут выглядеть Player и Point
Этап завершен, посмотрим на результат. Во время выполнения игрок может нажать клавишу P и его позиция отправится в массив для синхронизации всем игрокам. Также точки соединяться линией, чтобы маршрут был виден наглядно.
5. Spawn предмета и взаимодействие с ним
Создадим новый скрипт Bullet.cs:
Также создадим пустой GameObject + SpriteRenderer + Knob + меняем цвет. Вешаем на него скрипт Bullet.cs. Добавляем компонент NetworkTransform. Сохраняем как префаб Bullet.
В скрипт Player.cs добавляем спавн пули на сервере:
И запрос на свапн со стороны клиента:
Выставляем условие появления пули:
Добавим еще уничтожение игрока, если жизни закончились:
В настройках NetMan выставляем префаб Bullet как доступный для спавна:
Не забываем выставить префаб Bullet в переменную BulletPrefab префаба Player. Напоследок добавляем на префаб Player компонент CircleCollider2D и ставим галочку IsTrigger, чтобы пуля могла отловить попадание.
Последний этап завершен. Проверяем. По нажатию правой кнопки мыши из игрока вылетает пуля и летит туда, где стоял курсор. Если по пути пуля встречает другого игрока – он теряет одну жизнь. Все пули синхронизированы, даже если игрок подключился после их спавна.
Заключение
Надеюсь эти примеры помогут разобраться с азами работы с сетью в Unity. Знатоков этой темы призываю к обсуждению недочетов (про производительность и GC сейчас речь не идет). Полный проект можно скачать на гитхабе по этой ссылке.






















