Как сделать хитбокс в unity 2d
Решение нашлось в документации Unity, ссылку уже потерял.
Вариант 1 : Для тех уже более менее разобрался в работе Unity.
1.1 В script вставляем следующее:
1.2 Назначаем на кнопку данную функцию
Вариант 2: Для тех кто новичок, пошагово ниже:
2.1 Создаем script с названием change и в него вставляем следующее:
2.2 Создаём кнопку
2.2 Создаем пустой объект
И называем его Exit или на ваше усмотрение.
2.3 Перетащить наш скрипт в объект, как на фото:
2.4 Назначить кнопке действие выход, фото ниже:
Как перетащите в кнопку объект Exit в No Function необходимо задать выход. (фото ниже)
На этом все, теперь сохраняйте проект и проверяйте выход.
Вариант 3: Для тех кто будет использовать клавишу Esc
3.1 В скрипте, что обрабатывает игровой процесс вставляем следующий код:
3.2 Если используете кнопку-крестик, назначьте вызов функции по клику по этой кнопке.
Для тех, кто не очень ладит с английским есть:
Способ подключить грубо переведенные автоматическим переводчиком субтитры к видео урокам - в плеере нажмите "настройки" (шестеренка) -> нажмите "субтитры" -> английский -> снова "субтитры" -> перевести -> выберите русский язык.
Способ подключить удобный автоматический переводчик к браузеру, что даст возможность перевести либо отдельные фразы, либо всю страницу полностью, без нужды перехода на страницу онлайн переводчика.
Есть масса способов это сделать к каждому браузеру, как вариант можно использовать связку Google Chrome + расширение Google Translate - в браузере в правом верхнем углу нажмите на три вертикальные точки, войдите в "настройки" -> расширения -> еще расширения -> ввести в поиске "переводчик" -> выбрать Google Translate.
Использовать его просто - выделяете строчку, которую нужно перевести и в зависимости от её длинны вы либо щелкаете на появившуюся иконку переводчика, либо щелкаете правой кнопкой мыши и переходите на страницу переводчика, выбрав "Google переводчик"
Так же есть возможность перевести всю страницу - переводчик либо спросит об этом сам, либо в правом верхнем углу браузера нажмите на иконку переводчика и выберите "перевести страницу" (но со страницами с iFrame вложениями это не работает, допустим вы не переведете страницу с документацией API скриптов Unity этим способом)
Во вторых - если вам либо лень погружаться в рутину изучения документации, либо вы уже знаете азы и даже работаете над какими то проектами, могу объяснить некоторые прописные истины работы с движком:
1. Физика 3D
Во первых, если вы хотите использовать физику в своих проектах, то не используйте при перемещении и вращении физических объектов обращение к transform объекта, используйте вместо этого обращение к rigidbody, это даст физическом движку правильную информацию о движении объекта, оно будет сглаженным и в случае столкновения объект правильно среагирует на него. Обращение же к transform, по сути просто "телепортирует" объект без использовании физики, даже если это выглядит гладко, его движение состоит из тысяч "телепортаций", вместо настоящего движения.
1) Статические объекты - это объекты, которые определяют некоторые границы уровня, такие как стены или земля, эти объекты никогда не двигаются и для физического движка являются одним целым. Для движка это объект, имеющий коллайдер, не используемый как триггер и не имеющий Rigidbody. Такие объекты, сколько бы их не находилось на сцене, движок подсчитывает единожды и не обращается к ним при пересчете физики в каждом time step, определенным для физики. То есть допустим, если вы двигаете скриптом transform объекта, имеющий коллайдер, но не имеющий Rigidbody, движку приходится пересчитывать абсолютно все статические объекты, чтобы вновь построить сцену, это конечно же не эффективно для производительности.
2) Кинематические объекты - объекты, выполняющие роль статических объектов, но которые мы все же двигаем/вращаем обращаясь к ним через скрипт. Допустим это секретная стена, отодвигающаяся при определенном действии, но в обычном состоянии это типичная стена, как и все стены уровня. Для движка это объект, имеющий коллайдер, не используемый как триггер, но имеющий Rigidbody, настроенный как Kinematic. На этот объект, хоть он и имеет Rigidbody, не будут воздействовать внешние силы (гравитация или столкновения), в то же время он будет останавливать любые динамические объекты, столкнувшиеся с ним. Хоть этот объект и выполняет функцию статического объекта, все же движком он обсчитывается отдельно - всегда используйте для объектов, которые выполняют роль статических объектов, но все же изменяют свое положение в пространстве этот способ, так же перемещая их обращайтесь к их rigidbody, а не transform, это опять же даст правильный просчет физики при их перемещении. Скажем динамический объект, стоящий на кинематическом объекте, который двигается, будет двигаться вместе с ним. Обращение же к transform двигало бы кинематический объект, но не затрагивало бы стоящий на нем динамический объект.
3) Динамические объекты - это объекты, подверженные воздействию гравитации и воздействию других динамических объектов, т.е. они взаимодействуют со всем как настоящий физический объект. Для движка это объект, имеющий коллайдер, не используемый как триггер и имеющий Rigidbody, не помеченный как Is Kinematic. В игровом мире это может быть игрок, стрела пущенная им или допустим коробка, которую можно толкать. У таких объектов можно отключать воздействие гравитации, но они так же будут взаимодействовать с окружающим миром, их все еще можно будет толкнуть, хоть они и будут висеть в воздухе, как какой нибудь статический объект, если ранее им не придали ускорение.
4) Триггеры - все типы объектов могут быть триггерами, для этого в их коллайдерах должно быть указано что это триггер. Триггеры не участвуют в столкновениях, они будут проходить сквозь любые физические объекты, как и другие физические объекты буду проходить сквозь них, во всем же другом они будут так же реагировать на силы, такие как гравитация, если это динамический триггер-объект и тд. При событии OnTriggerEnter движок получает гораздо меньше данных, чем при событии OnCollisionEnter, это связанно с тем, что при событии OnCollisionEnter создается массив со всеми данными физического столкновения, в то время как для события OnTriggerEnter передается только ссылка на коллайдер вошедший в него, что конечно же менее ресурсозатратно. Советую всегда использовать для таких объектов как снаряды триггеры, если конечно вы не используете массив с данными о столкновении в своих целях. Триггеры активно используются в скриптинге и нужны для регистрации попадания в чего либо или регистрации что что-либо входит в них, конечно же работают они только с физическими объектами (имеющими коллайдер или триггер-коллайдер).
Триггером так же может быть объект вообще не имеющий графической части, используясь в виде триггер-зоны (что кстати в играх используется чаще), как и сам коллайдер может быть просто невидимым барьером.
Коллайдеры могут быть разных форм, рекомендуется использовать сочетание более одного примитивного коллайдера, если форма объекта сложная, на один объект можно назначить несколько коллайдеров. Рекомендуется либо вообще отказываться от Mesh коллайдера, либо использовать специально созданный хитбокс под модель, с минимальным количеством полигонов. Использование высокодетализованных Mesh коллайдеров может крайне сильно загрузить систему, задумайтесь перед их использованием. Использование Mesh коллайдеров для статических объектов не так сильно нагружает систему, если конечно вы используете их правильно и не обращаетесь к ним в течении работы программы.
Привет. В этот раз у нас кнопка (Button). Это первый элемент UI, который создан для непосредственного взаимодействия с пользователем, так что он и вправду очень важный. При этом кнопки ещё и довольно частый элемент в интерфейсе. Вы могли видеть в различных меню, инвентарях и других экранах.
Добавляем элемент Button
Я продолжу предыдущий проект, но просто перемещу Text и Image элементы, чтобы они нам не мешали. В следующий раз мы к ним вернемся.
Итак. Уже привычным способом добавляем на канвас кнопку:
В результате этого в центре экрана получаем новенькую кнопку:
Немного много лишнего, в другой раз таки оставлю сцену пустой…
Важной особенностью этого элемента в Unity является то, что текст внутри – это уже знакомый элемент Text. Его мы разбирали. Ещё круче то, что в Button можно положить, допустим, Image, получив кнопку с картинкой.
Инспектор кнопки содержит больше элементов, чем предыдущие, но среди них есть известные компоненты, вроде Rect Transform (положение, размер) и Image (спрайт кнопки).
Из предыдущих уроков мы узнали достаточно чтобы кастомизировать кнопку на свой вкус, например так:
И да, тень и обводка работают и с кнопками.
Компонент Button в Unity
Но разберем же и сам Button:
Чек-бокс Interactable определяет активна ли кнопка. Если флаг стоит, то на кнопку можно нажать, но если его снять, то нажатия больше не сработают (и она вообще ни на что реагировать не будет). Сама кнопка при этом тоже изменит цвет.
Сейчас она неактивна
Transition это переходы для отрисовки кнопки в разных состояниях. Может иметь три варианта: Color Tint, Sprite Swap и Animation.
Color Tint, это когда мы выбираем один спрайт для кнопки, но меняем лишь цвета. Т.е. цветовой переход, как сейчас. У нас есть цвета для нормального состояния, при наведении курсора, при нажатии, при выделении и для неактивного состояния.
Fade Duration это длительность перехода.
Курсор на кнопке*
Sprite Swap позволяет просто выбрать отдельные спрайты для этих же состояний:
Всё ещё на кнопке*
Animation один из самых интересных. Тут можно создать полноценный контроллер анимации и задать отдельные анимации для разных состояний.
Жмём Auto Generate Animation. И сохраняем в новую папку Animations. В результате вы должны получить такой вот файлик:
Двойным кликом по файлу Button открываем Animator и видим готовую конструкцию с различными состояниями. Эти же имена должны быть указаны в самой кнопке.
Добавим анимацию при наведении на кнопку мыши. Пускай… она будет ставать немного больше. Выделяем кнопку и открываем окошко анимации:
Выбираем Highlighted и добавляем переменную Scale:
Анимация будет такая: небольшое увеличение до 30 секунды, а после будет идти уменьшение до изначального размера.
Запускаем и проверяем:
Далее идёт Navigation. Он определяет, как можно будет перемещаться по элементам UI при помощи клавиатуры. None – запрещает управление, далее следуют Автоматический, Горизонтальный, Вертикальный, Явный (Explicit) – позволит самостоятельно определить направление. А Visualize ниже нужен, чтобы отобразить перемещение наглядно:
Вот как тут
Последний блок этого компонента это On Click (). Но для его реализации нужен скрипт, так что отложим это на другой раз.
А с кнопкой на этом всё 🙂 А в официальных обучающих ресурсах есть ещё обучающий материал по кнопкам.
Как только появилось немного свободного времени, я продолжил знакомство с Unity 3d. В конечном итоге я хочу создать простенький двумерный (2D) платформер – игру, в которой персонажем можно управлять с помощью джойстика. В этом уроке я расскажу вам, как буквально за несколько минут можно создать персонажа и играть в Unity 3d.
Как обычно, все начинается с нового проекта. Выбираем 2D, создаем и видим бескрайнюю плоскость. Не стоит унывать, вскоре мы её заполним. В папке с проектом находим каталог Assets, в нем директорию Textures –копируем туда три картинки. Главный герой – кот Балун:
Его надо добавить спрайтом (мы потом сделаем его анимированным, если руки дойдут) GameObject -> 2D Object -> Sprite. Плоскость, по которой он будет бегать:
И кнопка (или, точнее, табличка) выхода:
Размеры могут не совпадать, это уж поменяйте сами, как угодно – таскайте мышкой за границы объектов. Далее выбираем GameObject -> Camera. В итоге у нас должна получиться такая вот картинка:
Все прекрасно, кроме того, что все неподвижно. Давайте научим Балуна двигаться. Я сразу же решил делать свой 2D платформер под джойстик, хотя, в принципе, можно заставить джойстик работать с любой игрой – читайте эту заметку – но все же мне интересен сам принцип.
Однако, перед тем, как двигаться, надо сделать наши картинки объектами. Для спрайта с котом добавляем два компонента: Physics 2D -> Rigidbody 2D и Physics 2D -> Box Collider 2D. Тоже самое и для изображения поверхности, только у поля Body Type ставим Static – чтобы платформа не падала вниз под собственной тяжестью:
Вот теперь можно приступать к написанию скрипта для движения. Вот листинг скрипта move.cs (пишем на си шарп):
Этот скрипт применяем на спрайт кота. Однако, для окончательной настройки джойстика, надо добавить еще кое-что. Открываем Project Settings -> Input и меняем и меняем имена обработчиков кнопок джойстика в соответствии с вышеприведенным листингом:
Вот теперь все: нашим котом Балуном можно управлять с помощью джойстика: он будет бегать по платформе вправо-влево. На сегодня пока хватит. Готовый проект с исходниками для Unity 5.5.1 можно скачать здесь. Продолжение следует.
Программирование и разработка
Из этой статьи вы узнаtте, как начать создавать игру с помощью Unity, начиная только с идеи. Кроме того, вы изучите хороший метод запуска для создания игр Unity 2d с нуля.
Важно отметить, что это руководство не сделает из вас полноценного разработчика Unity и не научит программировать. Однако это поможет вам быстро заставить что-то работать на экране.
Unity — один из самых популярных доступных бесплатных игровых движков. Он также имеет отличный 2D-движок, поэтому 3D-модели не нужны. Ещё одной привлекательной особенностью Unity является то, что он не требует обширных знаний в области программирования.
Разработка игр с помощью Unity хороша для создания вещей, которые уже созданы. Короче говоря, Unity идеально подходит для разработки небольших инди-игр.
Ниже приведено пошаговое руководство по созданию 2D-игры в Unity для начинающих.
Шаг 1. Идея
Шаг первый довольно прост. Вы легко можете сделать это в уме.
Перед тем, как начать, определитесь, какую игру вы делаете. Чтобы понять это, вы должны задать себе несколько вопросов по игровому дизайну:
- Это платформер, игра с видом сверху или, может быть, изометрическая?
- Какая будет тема и основная история?
- Как это будет выглядеть?
- Какой движок вы будете использовать?
- Главное, чем ваша игра будет выделяться? Какую новую механику или идею он представляет или что будет хорошо?
Хотя вам не нужны твёрдые или конкретные ответы на большинство из этих вопросов, вам всё же необходимо общее представление о том, что вы собираетесь делать, прежде чем начать. Вы можете расширить эту идею и создать её базовый прототип позже. Кому-то нравится делать это на бумаге, а кто-то может просто провести мозговой штурм.
Для начала сделаем платформер. В этом примере особое правило платформеров состоит в том, что игрок должен управлять двумя персонажами одновременно, чтобы решать головоломки, а персонажи должны встретиться, чтобы пройти уровень.
Как только у вас появится несколько идей о том, что делать, у вас будет руководство, с которого можно начать. Теперь можно переходить к прототипированию.
Шаг 2. Получите инструменты
Чтобы создать игру в Unity, вам понадобится Unity. Вы можете скачать персональную версию здесь . Имейте в виду, что личная версия необходима только в том случае, если вы не получили более 100 тысяч долларов для финансирования или дохода от своей игры.
Мы используем Unity версии 2019.2.14f1
Вы также можете создавать графику для своей игры. Поскольку Unity использует пиксельную графику , я настоятельно рекомендую использовать GraphicsGale . GraphicsGale бесплатна, проста в использовании и обладает множеством функций. Однако вы можете свободно использовать любой удобный вам редактор, будь то Photoshop, Blender или Windows Paint.
Шаг 3. Настройте свой проект
Пока Unity устанавливается, вы можете потратить время на подготовку некоторых своих ресурсов. Вам понадобится некоторая замещающая графика, называемая заполнителями, чтобы вы могли видеть, что вы делаете. Чтобы нарисовать все анимации вашего персонажа, врагов и окружающую среду, потребуется время, поэтому вы можете начать работу с простой графикой.
Для этого шага мы используем GraphicsGale, но вы можете использовать любой редактор, который вам нравится. Начните с того, что сделайте замену стен в игре. (Помните, вы всегда можете сделать больше позже.) Стены должны быть размером 100 на 100 пикселей.
Сделайте что-нибудь быстрое и лёгкое, чтобы представить элементы нашей игры.
После завершения загрузки Unity вы можете открыть Unity Hub и начать новый проект. Назовите проект как хотите, но не забудьте выбрать 2D для настройки проекта.
Обязательно используйте 2D-шаблон.
В Unity есть невероятная функция под названием Unity Asset Store. Asset Store полон готовых фрагментов игры, таких как модели, текстуры, утилиты или программы AI. Они доступны для продажи, а некоторые даже предлагаются бесплатно. Из-за этого легко создать игру, не создавая слишком много ресурсов самостоятельно. Вы можете просто взять заранее запрограммированную игровую механику и прикрепить её к собственному арту.
Загрузите стандартные ресурсы из Unity Store.
Вам также понадобятся некоторые инструменты для создания 2D-игр в Unity, которые вам немного помогут. Перейдите по этой ссылке и загрузите Git в виде zip-архива. Затем разархивируйте и перетащите папку внутри в обозревателя ресурсов. Возможно, вам придётся перезапустить Unity после этого, чтобы он работал правильно.
Теперь у вас должно быть всё необходимое для начала работы.
Шаг 4. Создайте карту
Вы также захотите добавить свою иллюстрацию-заполнитель в браузер ресурсов. Просто перетащите всю папку из окон в обозревателя ресурсов.
Ваша новая палитра плитки, там ещё ничего нет.
Чтобы добавить искусство в палитру, просто перетащите свой заполнитель для блоков уровня в окно выше.
Затем создайте что-нибудь для рисования с помощью палитры. В окне Hierarchy щёлкните правой кнопкой мыши и выберите 2D Object> Tilemap.
Щёлкните здесь правой кнопкой мыши, чтобы создать карту листов.
Теперь у вас должна быть возможность рисовать на своём уровне. Постарайтесь пока держать его в пределах границ камеры и добавить несколько платформ, на которые можно прыгать.
Наконец, нужно позаботиться об одном последнем шаге. Прямо сейчас ваша карта — это только визуализация, и ваш персонаж не будет сталкиваться со стенами, которые вы построили. Фактически, ваш персонаж провалится прямо сквозь пол. Вы должны добавить свойство физики, чтобы игра знала, что эти квадраты имеют значение, и они созданы не только для того, чтобы красиво выглядеть.
Компонент, который вам нужно добавить, называется Tilemap Collider 2D. Просто воспользуйтесь окном поиска, чтобы найти его и добавить на карту листов.
Шаг 5. Сделайте персонажа
Помните, как к вашей тайловой карте был прикреплён компонент столкновения? Что ж, нашему персонажу нужно много компонентов, прикреплённых к нему, чтобы функционировать. Вместо того, чтобы каждый раз перестраивать каждый компонент, вы можете создавать префабы, которые будут служить игровыми объектами. Их можно использовать снова и снова.
Теперь перетащите мальчика-робота в свою сцену и щёлкните по нему в иерархии. Глядя на все компоненты, прикреплённые к нему, вы заметите, что у него есть система анимации, средство рендеринга спрайтов и несколько различных функций столкновения и управления.
У него есть система анимации, средство визуализации спрайтов и несколько различных функций управления столкновениями и контроля.
Хотя вы можете использовать его сейчас, вам следует создать собственного персонажа, который в итоге заменит его. Его спрайт и анимация будут служить вам заменой, пока вы продолжаете развиваться вокруг него.
Поскольку идея игровой механики в этом уроке состоит в том, чтобы встретить двух персонажей, вам следует перетащить в сцену второго мальчика-робота, возможно, с другой стороны. Таким образом, каждый раз, когда вы играете в игру, вам придётся координировать свои действия, чтобы встретить двух персонажей.
Шаг 6. Дорожная карта и сборка
Дорожная карта — один из многих шагов, которые вы можете предпринять отсюда. Теперь, когда у вас есть прототип, вся трудоёмкая работа по настройке выполнена.
Например, ваша дорожная карта может выглядеть примерно так:
- Добавить систему монет.
- Добавить здоровье и урон игрока.
- Основные враги.
- Проверка ошибок.
- Улучшить базовое искусство.
- Создавайте игровые сценарии и выигрывайте.
- Добавить элементы пользовательского интерфейса.
- Добавить систему меню.
Это начинает рассматривать возможности игры в перспективе и помогает увидеть, сколько работы осталось между этим прототипом и готовой игрой. Знать это расстояние важно, так как у вас не всегда есть неограниченное время и внимание, которые можно вложить в игру.
Дорожная карта также помогает контролировать ваши ожидания. После того, как вы создадите дорожную карту, следующим шагом будет следовать ей, продолжая улучшать свою игру.
Заключение
В этом руководстве вы познакомились только с началом создания игры. Остальное зависит от вас. У Unity есть активное сообщество, и существует множество обучающих ресурсов, которые выходят далеко за рамки этого простого игрового руководства. Некоторые из лучших учебных ресурсов включают в себя кодирование или дизайн игры Bootcamps. Путь к тому, чтобы стать разработчиком игр, начинается с вашей первой игры, какой бы простой она ни была.
Читайте также: