Основы разработки игр на unity

Введение

Слово предупреждения перед началом — данный текст не является самым исчерпывающим и всеохватывающим руководством по написанию скриптов в Unity. Данное руководство предназначено для человека, который хочет использовать Unity и который не имеет никаких знаний о каком-либо виде программирования. Используйте информацию отсюда, чтобы получить начальный опыт и отбросить некоторые опасения при добавлении скриптов к своим игровым объектам.

Написание скриптов, или программирование вообще, изучается на самых первых этапах, особенно полными новичками. Скорее всего, вам необходимо преодолеть некоторые неоправданные страхи относительно того, насколько удивительно трудным кажется написание скриптов. Основы использования скриптов Unity на самом деле не так и сложны. Мы делаем некоторые каждодневные вещи, которые похожи на последовательные процедуры в скриптах.

Существует множество книг, руководств и уроков по программированию, которые могут показать вам, как на самом деле разобраться в деталях. Также имеется множество видео-уроков для изучения Unity, и они почти все обучают основам написания скриптов. После прохождения всех этапов в данном руководстве, вы почувствуете себя более комфортнее, изучая подобные уроки. По крайней мере, у вас появится основное понимание того, что говорят другие авторы.

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

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

Уроки восьмой и выше фактически начинают рассматривать применение концепции написания скриптов в Unity.

Кажется, что большая часть начинающих может довольно легко узнать о том, как пользоваться Unity, это в первую очередь касается работы скриптов, которых они так боятся. Данное руководство для новичков предполагает, что вы на собственном опыте изучили из других источников, как в общих формах обращаться с редактором Unity, даже просто работая с файлами ресурсов. Это руководство только об изучении основ по работе со скриптами.

Онлайн-школа Пиксель

Возраст: от 10 до 14 лет
Сайт: https://edu.clubpixel.ru/unityТелефон: +7 (495) 150-59-65Стоимость: 3000 — пробный курс из 4 занятий, 9000 — модуль из 12 занятий

Разработчик игр на Unity. Программирование на C#

Программа курса

Ваш ждут модули по 12 занятий с разным уровнем сложности.

1 модуль | Unity — основы создания 2D игр

Курс Unity предназначен для того, чтобы ребенок взглянул на игры со стороны инженера-разработчика, познакомился с терминами и классификацией игр. Настройка объектов, префабов, анимации, программирование – являются основными задачами, которые должен решить разработчик игр.

План модуля:

  • Знакомство с Unity. Подготовка объектов к размещению на сцене. Основные определения
  • Система координат, первые объекты, первый программный код
  • Настройка камеры. Ошибки при настройке камеры. Слежение за объектом
  • Компоненты объектов, настройка компонентов
  • Настройка анимации, программирование анимации
  • Настройка пользовательского интерфейса в игре
  • Настройка звуковых эффектов
  • Настройка видеоклипа
  • Настройка и создание меню игры
  • Создание игры

2 модуль | Unity — основы создания 3D игр

Мир игр — абсолютно безграничный мир! Чтобы создать 3D-игру нужны знания не только в области программирования и моделирования объектов, а также в области дизайна уровней, дизайна интерфейсов, анимировании объектов, звукорежессировании. Курс предназначен для того, чтобы ребенок оценил возможности программы Unity при создании 3D-игр.

План модуля:

  • 3D объекты
  • Разновидность 3D-объектов, компоненты и свойства. Префабы
  • Движение 3D объектов
  • Текстуры, материалы
  • Камера и освещение
  • Roll and Ball
  • Создание собственного ландшафта
  • Настройка управления от первого лица
  • Настройка и создание меню игры
  • Настройка UI
  • Собственная 3D игра

3 модуль | Unity — игровая реальность

Изучая этот модуль, дети загрузят в среду Unity готовый набор ассетов. С помощью них разберутся с разновидностями игр и познакомятся с ними поближе. Узнают, какие объекты присутствуют в играх, смоделируют физику объектов, проявят дизайнерский вкус и соберут игры в свою коллекцию!

План модуля:

  • Автомобильный симулятор
  • Стайлинг
  • Управление автомобилем
  • 3D -шутер
  • Управление 3D шутера
  • Создание собственной карты для 3D шутера
  • Авиационный симулятор
  • Управление самолетом
  • Полет и посадка
  • Вспомним 2D трансформер
  • Самостоятельная сборка трансформера
  • Сборка всех игр курса

UNITY3DSCHOOL

UNITY3DSCHOOL – это русскоязычная онлайн школа для обучения разработке игр на топовом движке Unity. Специалисты разработали курсы разных уровней сложности, чтобы любой желающий смог с нуля научится разрабатывать игры. Минимальный возраст для обучения – 12+.

В дополнение к курсам по разработке игр вы можете пройти курсы по созданию уникальной игровой графики, которые научат вас техникам рисования в самых популярных графических редакторах – Photoshop и Zbrush.

Эти курсы не являются обязательными для освоения игрового движка Unity, но владение приведенными техниками существенно расширят ваши возможности и станут отличным бонусом при поиске хороших вакансий.

На UNITY3DSCHOOL есть все , что нужно для создания игры!

Обучаясь в онлайн школе вы узнаете:

  • как создать игру
  • как написать скрипт
  • как нарисовать персонажа
  • как сделать фоны для игры
  • как монетизировать игру
  • как настроить рекламу в игре

Unity3D – самый популярный игровой движок на сегодняшний день. Он идеально подходит для инди-разработчиков и крупных компаний, сочетая в себе простоту и сильный функционал.

Структура обучения.

Первый обучающий курс – дает понимание основ:

  • Unity Базовый курс 2D
  • Unity Базовый курс

Углубленные курсы – дают основные навыки использования Unity:

  • Программирование на С# в Unity
  • Unity Углубленный курс

Завершающий целевой курс – научит как правильно монетизировать игру.
Монетизация игры на Unity с Google Play.

Структура моноповедения

Ключевые функции

Все компоненты наследуются от класса MonoBehaviour. Он включает в себя несколько стандартных методов, главное:

  • void Start (), который вызывается всякий раз, когда объект, содержащий скрипт, создается в сцене. Это полезно в любое время, когда мы хотим выполнить некоторый код инициализации, например. установить экипировку игрока после того, как он появится в матче.
  • void Update (), который вызывается каждый кадр. Это то место, где будет выполняться основная часть кода, включающего пользовательский ввод, обновляющего различные свойства, такие как движение игрока в сцене.

Переменные инспектора

Часто мы хотим сделать компоненты максимально гибкими. Например, все оружие может иметь разный урон, скорострельность, has_sight и т. Д. Хотя все оружие, по сути, одно и то же, мы можем захотеть иметь возможность быстро создавать различные вариации с помощью редактора единства.

Другой пример, когда мы можем захотеть это сделать, — это создание компонента пользовательского интерфейса, который отслеживает движения мыши пользователя и помещает курсор в область просмотра. Здесь мы можем захотеть контролировать чувствительность курсора к движениям (если пользователь использовал джойстик или геймпад, а не компьютерную мышь). Таким образом, имеет смысл сделать эти переменные легко изменяемыми как в режиме редактирования, так и поэкспериментировать с ними во время выполнения.

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

Мы можем сделать это легко, просто объявив их как общедоступные переменные в теле компонента.

Обратите внимание, как мы можем сделать переменные с разными уровнями доступа, частными, общедоступными или общедоступными, но не отображаемыми в окне инспектора

Принятие пользовательского ввода

Конечно, мы хотим, чтобы наша игра реагировала на ввод пользователя. Наиболее распространенные способы сделать это — использовать следующие методы в функции Update () компонента (или в любом другом месте, которое вам нравится):

  • Input.GetKey (KeyCode.W) Возвращает True W, удерживается клавиша W
  • Input.GetKeyDown (KeyCode.W) Возвращает True при первом нажатии клавиши W.
  • Input.GetAxis («Вертикальный»), Input.GetAxis («Горизонтальный») Возвращает значение между -1,1 перемещения мыши при вводе.

Обнаружение столкновений

Ранее мы упоминали компоненты Collider и Rigidbody, которые можно добавить к объекту. Правило для столкновений состоит в том, что один объект в столкновении должен иметь твердое тело, а другой — коллайдер (или оба имеют оба компонента). Обратите внимание, что при использовании raycasting лучи будут взаимодействовать только с объектами, к которым прикреплены компоненты коллайдера. После настройки в любом настраиваемом компоненте, прикрепленном к объекту, мы можем использовать методы OnCollisionEnter, OnCollisionStay и OnCollisionExit для реагирования на коллизии. Получив информацию о столкновении, мы можем получить ответственность за GameObject и использовать то, что мы узнали ранее, для взаимодействия с прикрепленными к нему компонентами

После настройки в любом настраиваемом компоненте, прикрепленном к объекту, мы можем использовать методы OnCollisionEnter, OnCollisionStay и OnCollisionExit для реагирования на коллизии. Получив информацию о столкновении, мы можем получить ответственность за GameObject и использовать то, что мы узнали ранее, для взаимодействия с прикрепленными к нему компонентами.

Следует отметить, что твердые тела обеспечивают физику, такую ​​как гравитация, для объектов, поэтому, если вы хотите отключить это, вам нужно будет включить is_kinematic .

Установите флажок «Кинематика», чтобы отключить нежелательную физику, но сохранить хорошее обнаружение столкновений.

Скриптофобия

Теперь я спрашиваю вас, настолько ли трудным был процесс? Беспокоил ли он вас, потому что вы не верили в то, что сможете сделать все это? Заходили ли вы на форум, чтобы спросить о том, как вести разговор, а после разговаривали по телефону в середине всего этого?

Скриптофобия: страх не позволяющий писать инструкции (то, что я делал).

У вас есть такие страхи, которые не дают вам написать несколько инструкций в последовательном ключе?

Дело в том, что вы занимаетесь написанием скриптов всю свою жизнь, просто вы никогда не должны были записывать то, что вы делаете на листке бумаги, перед тем как, что-то сделать. Вы бы смогли, если бы действительно этого хотели, но это занимает слишком много времени и не является необходимым. Но вы, на самом деле, знаете, как это сделать. Ну, хорошо, и что вы об этом думаете? Вы должны начать записывать действия, не для себя, а для мира, который создаете.

Что нужно знать, чтобы стать разработчиком игр на Unity

Кратко перечислим, какие технологии вам нужно освоить, чтобы стать разработчиком Unity-игр:

  • Язык программирования C#.
  • Инструменты среды разработки Юнити для создания интерфейса, звука, анимации, физики и искусственного интеллекта.
  • Основные паттерны проектирования видеоигр и принципы геймдизайна.
  • Создание игровых и поведенческих сценариев.
  • Особенности 2D- и 3D-игр.
  • ПО для тестирования, отладки и баг-трекинга.

Приводим пошаговую инструкцию, которая поможет вам при обучении:

  1. Скачайте движок с официального сайта, установите и познакомьтесь с основными опциями.
  2. Посмотрите, как создается самый простой интерфейс – в учебниках или в видеоуроках с Youtube.
  3. Составьте график и список тем для изучения. Начинайте заниматься регулярно, желательно не реже 1-2 раз в неделю.
  4. Сразу же закрепляйте теорию на практике, например, можно найти скринкасты опытного разработчика и повторять код.
  5. Когда у вас будут уверенные навыки, вы сможете практиковаться на реальных проектах, к примеру, на бирже фриланса.

Сколько стоит движок для создания игр

Для работы в Unity нужно оформить подписку – вы можете выбрать один из четырех тарифов в зависимости от потребностей и годового дохода.

Тарифный план Personal Plus Pro Enterprise
Годовая абонентская плата в долларах 0 долл. 399 долл. 1800 долл. 2400 долл.
Сумма в рублях в год 0 руб. 29,5 тыс. руб. 133 тыс. руб. 177 тыс. руб.
Доход пользователя за последние 12 месяцев До 100 тыс. долл. До 200 тыс. долл. От 200 тыс. долл. От 200 тыс. долл.
Особенности Доступны базовые инструменты Доступна аналитика о поведении игроков Доступ к исходному коду, техподдержка команды Unity Доступны специальные отраслевые решения, премиум-поддержка

XYZ School

Получить углубленные знания по геймдев-направлениям в рамках 30 авторских онлайн-курсов рекомендует интернет-школа XYZ. По словам основателей, цель – сделать обучение осмысленным, связывая воедино ожидания работодателей, компетенции экспертов и возможности преподавателей.
 
Базовый кейс «Создай свой собственный платформер» предлагает начать рассмотрение дисциплины с азов, а затем овладеть продвинутыми приемами для проектирования архитектуры 2D-игр, написания кода, создания AI, анимации, оптимизации и монетизации проекта. Формат – онлайн-лекции, стримы преподавателей, проверка домашних заданий.
 
Получить представление о предмете неофиты могут на бесплатном онлайн-интенсиве «Первая игра за 3 дня». Новички познакомятся основами проектирования, посмотрят, что у движка «под капотом», и создадут дебютную гиперказуалку. Бесплатный контент также представлен на ютуб-канале школы.

Расширенные возможности

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

Создание графического интерфейса

Unity имеет полноценный движок пользовательского интерфейса для создания графического интерфейса для вашей игры. В целом эти компоненты работают примерно так же, как и остальная часть двигателя.

Расширение редактора Unity

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

Анимация

Unity имеет систему анимации на основе графиков, которая позволяет вам смешивать и управлять анимацией для различных объектов, таких как игроки, реализующие систему анимации на основе кости.

Материалы и PBR

Unity использует физический движок рендеринга, который обеспечивает освещение в реальном времени и реалистичные материалы. Реальность такова, что вам нужно либо сначала изучить 3D-моделирование, либо использовать модели, созданные и оптимизированные кем-то другим, прежде чем вы доберетесь до этого, чтобы создавать вещи, которые действительно хорошо выглядят.

Сколько зарабатывает юнити разработчик

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

Источник Минимальная зарплата Максимальная зарплата
workius.ru 30 000 руб. 200 000 руб.
hh.ru 23 000 руб. 250 000 руб.
russia.trud 63 500  руб. 100 000 руб.

Больше информации о навыках и умениях юнити специалиста смотрите в этом видео. Автор канала подробно рассказывает о требованиях к кандидатам на должность разработчика.

Unity Junior Developer — Требования к кандидатам

Открытое образование

Курс посвящен изучению разработки игр с помощью движка Unity. По окончании курса вы сможете осуществить мечту любого геймера: создать игру по собственному сценарию.

Если вы давно хотели научиться разрабатывать игры, генерировать идеи, создавать концепцию и собственных персонажей, то этот курс станет для вас хорошим стартом на пути к работе в GameDev.

Для успешного прохождения курса, необходимо знание языка программирования C#, а также крайне желателен хотя бы базовый уровень английского.

В состав курса входят видеолекции, видеопрезентации, интерактивные формы обучения в формате видеоконференций. Длительность курса составляет 10 недель. Трудоемкость курса – 3 зачетные единицы. Средняя недельная нагрузка на обучающегося – 10 часов.

Результаты обучения:

  • Знание на уровне представлений алгоритмов, методов и средств обработки информации, применяемых при анализе научно-технической информации, отечественного и зарубежного опыта по тематике исследования.
  • Знание на уровне представлений основ объектно-ориентированного программирования, синтаксиса языка программирования C#.
  • Знание на уровне воспроизведения инструментальных средств разработки, доступных у платформы Unity.
  • Знание на уровне воспроизведения назначений и основных свойств стандартных элементов Unity.
  • Умения теоретические собирать эмпирический материал, опираясь на современные источники, осуществлять сбор, анализ научно-технической информации, отечественного и зарубежного опыта по тематике исследования.
  • Умения практические реализовывать базовые алгоритмические конструкции на языке программирования C#.
  • Владение навыками самостоятельного проведения библиографической работы с привлечением современных электронных технологий.
  • Владение навыками работы с интегрированной средой разработки, которая позволяет реализовывать разработку проекта.

Чему вы научитесь?

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

В процессе обучения под руководством опытного преподавателя вы не только создадите собственную полноценную компьютерную игру, но и узнаете как наиболее эффективно монетизировать ваши произведения.

SkillFactory

В активе онлайн-школы Skillfactory  31 программа по Data Science, аналитике и программированию от экспертов рынка. С 2016 года обучение на реальных проектах с перспективой приобретения навыков под запросы бизнеса прошли свыше 9 тысяч человек.
 
12-месячный комплекс «Геймдевелопер» ориентирован на новичков, но будет интересен и тестировщикам или дизайнерам гейм-индустрии, которые хотят войти в гемдев. Студенты пройдут путь от знакомства с инструментом до подготовки многопользовательского продукта в жанре «танки», командной или инди-разработки и выхода на рынок. На протяжении всего периода слушатели могут рассчитывать на сопровождение куратора, помощь ментора и общение в профессиональном комьюнити. 

Настройка среды в Unity

Начнем с самого простого: загрузки и настройки Unity.

Загрузите последнюю версию с официального сайта или торрента и запустите установочный файл.

Полезно знать: невозможно использовать отладчик Visual Studio 2013 Express с Unity. Вы должны иметь Pro версию Visual Studio и купить плагин. С версией Express, вы будете иметь лучший редактор кода, но отсутствие отладчика сведет на нет все его достоинства.

Mac OS X

— существенно лучше, чем старый MonoDevelop 2 в предыдущих версиях Unity. Он, конечно, далек от совершенства, но ничего лучшего под на Mac не придумано.

На каком языке программировать в Unity?

Unity позволяет кодировать на трех языках: JavaScript, C# и Boo. Рекомендую использовать C# — он более мощный и проще.

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

Вот несколько ссылок, которые могут быть вам полезными:

  • : основа всех основ. Не зная интерфейса, вы не сможете создавать игры в Unity 3D
  • : изучение этого раздела поможет вам создать свою собственную сцену
Первая сцена. Создаем новый проект.

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

Выберите 2D настройки. Как и прежде, вы можете изменить этот флаг в настройках проекта позже.

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

Где получить опыт Юнити-разработки

Если вы начинающий Unity-разработчик, то можете искать простые и недорогие заказы на российских или зарубежных биржах фриланса. Периодически на freelance-площадках появляются задания, с которыми справится начинающий гейм-разработчик. А также можно найти вакансии для стажеров на сайтах по поиску работы.

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

Кроме того, обучающие программы, рассчитанные на 1-2 года, включают стажировку. Вы сможете принять участие в разработке реальной видеоигры на Юнити – в самой онлайн-школе или в партнерской гейм-студии.

Raycasting

Возможно, вы слышали об этом раньше, когда люди сравнивают игры FPS, основанные на «физике» или «на основе лучей». Raycasting по сути похож на лазерную указку, которая при соприкосновении с «коллайдером» или «твердым телом» возвращает «попадание» и передает детали объекта.

Есть два сценария, в которых это может пригодиться (вероятно, их гораздо больше):

  1. Если вы разрабатываете систему оружия для игры, вы можете использовать raycasting для обнаружения попаданий и даже настроить длину луча, чтобы предметы ближнего боя «поражали» только на коротких дистанциях.
  2. Создайте луч от указателя мыши к точке в трехмерном пространстве, то есть если вы хотите, чтобы пользователь мог выбирать юниты с помощью мыши в стратегической игре.

Пример 2, подробно описанный выше

Как видите, код для этого немного сложнее. Ключевой момент, который нужно понять, это то, что для того, чтобы направить луч туда, куда указывает мышь в трехмерном пространстве, требуется преобразование ScreenPointToRay. Причина этого в том, что камера визуализирует трехмерное пространство как двумерное окно просмотра на экране вашего ноутбука, поэтому, естественно, существует проекция для переноса обратно в трехмерную.

Управление игровыми объектами

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

  • Перевод, вращение, масштаб
  • Создать новые GameObjects
  • Отправка сообщений существующим GameObject / компонентам

Трансформации

Все GameObjects имеют свойство transform, которое позволяет выполнять различные полезные манипуляции с текущим игровым объектом.

Вышеупомянутые методы довольно понятны , просто обратите внимание, что мы используем gameObject в нижнем регистре для ссылки на GameObject, которому принадлежит этот конкретный экземпляр компонента. В общем, рекомендуется использовать локальное , а не глобальное положение / поворот объекта. Обычно это упрощает перемещение объектов разумным образом, поскольку ось локального пространства будет ориентирована и центрирована на родительском объекте, а не на мировом начале координат и направлениях x, y, z

В общем, рекомендуется использовать локальное , а не глобальное положение / поворот объекта. Обычно это упрощает перемещение объектов разумным образом, поскольку ось локального пространства будет ориентирована и центрирована на родительском объекте, а не на мировом начале координат и направлениях x, y, z.

Преимущества локального пространства станут немного более очевидными с диаграммой!

Если вам нужно преобразовать между локальным и мировым пространством (что часто бывает), вы можете использовать следующее:

Как вы понимаете, за этим стоит довольно простая линейная алгебра, на которую намекает «Обратный» в имени метода.

Создание новых игровых объектов

Поскольку GameObjects — это в основном все в вашей сцене, вы можете иметь возможность генерировать их на лету. Например, если у вашего игрока есть какая-то пусковая установка для снарядов, вы можете захотеть создавать снаряды на лету, у которых есть собственная инкапсулированная логика для полета, нанесения урона и т. Д.

Сначала нам нужно ввести понятие префаба . Мы можем создать их, просто перетащив любой GameObject в иерархии сцены в папку с ресурсами.

Как выглядит префаб на вкладке Asset

По сути, это хранит шаблон объекта, который только что был в нашей сцене, со всеми теми же конфигурациями.

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

Когда у нас есть эти сборные компоненты, мы можем назначить их переменным инспектора (как мы говорили ранее) для любого компонента в сцене, чтобы мы могли создавать новые GameObject, как указано в сборке, в любое время.

Затем мы можем выполнить «создание экземпляра» префаба и манипулировать им в желаемом месте сцены и установить необходимые родительские отношения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector