Как сделать катящийся шар юнити

Добавил пользователь Евгений Кузнецов
Обновлено: 04.10.2024

У меня есть этот шар, который я хочу перемещать, катясь как некий инопланетянин, и он вращается в своем transform.up, чтобы изменить свое направление, и катится в своем transform.right, чтобы двигаться вперед и назад. Но когда он катится, его верхний и правый вектор преобразования портятся.

В конце концов, я не смог найти способ позволить ему катиться, не испортив мой вектор направлений. Я понятия не имею, как это сделать. Так что да, пожалуйста, помогите. ОРЗ. Кстати, я не создаю игру с использованием франшизы Ben10. Мяч должен действовать как колесо. действительно круглое и сферическое.

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

Конечный продукт

В этом уроке вы узнаете следующие аспекты разработки игр для Unity:

  • настройка 2D проекта в Unity
  • импорт спрайтов
  • управление микрофоном
  • работа с физическими столкновениями

1. Создайте новый проект Unity


2. Настройки сборки


3. Пользовательский интерфейс Unity


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

4. Игровой интерфейс

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


5. Язык программирования

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

6. Активы и звуковые эффекты

Прежде чем мы начнем кодировать, нам нужно добавить ресурсы в проект Unity. Вы можете сделать это одним из нескольких способов:

  • выберите Импортировать новый актив в меню Активы
  • добавить элементы в папку активов в вашем проекте
  • перетащите активы в окно проекта

7. Фон


8 Размер камеры


9 Спрайт лист




10. Корова твердое тело 2D

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


Установите флажок Фиксированный угол, чтобы корова не вращалась в случае столкновения. Мы не будем использовать физическую гравитацию по умолчанию в этой игре, вместо этого мы будем имитировать нашу собственную. Измените шкалу гравитации с 1 на 0, чтобы сила тяжести по умолчанию не влияла на объект.


11. Добавление коллайдеров

Чтобы пол определял, когда персонаж касается его, нам нужно добавить компонент Box Collider 2D . Коллайдер — это физическая форма, которая определяет область, которая вызывает столкновение.


Измените свойство Size на X: 4.8 и Y: 0.05, чтобы создать маленький прямоугольник, в котором будет расположена корова. Наконец, добавьте Box Collider 2D к объекту игры коровы, повторив эти шаги.


12. Источник звука коровы



13. Добавление воздушных шаров

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



14. Добавление препятствий

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


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

Unity - Полное руководство для начинающих по разработке игр 🔥

🎮 Игры

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

Вступление

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

Почему Unity?

Если вы хотите делать игры

Когда дело доходит до разработки инди-игр, вариантов действительно очень мало. Если вы хотите создавать игры, есть три основных варианта: Unreal, Unity или GameMaker.

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

В Unity есть множество очень успешных игр, таких как Escape from Tarkov (FPS), Monument Valley (Puzzler) и This War of Mine (Стратегия / Выживание).

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


Если вы хотите прототипировать пользовательский опыт

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

Unity полностью поддерживает VR и AR и, следовательно, может стать отличным инструментом для изучения архитектуры, автоматизации и моделирования с помощью клиентов.

Окно редактора Unity

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

Просмотр сцены: позволяет размещать и перемещать игровые объекты в сцене.

Просмотр игры: предварительный просмотр того, как игрок будет видеть сцену с камеры.

Инспектор: предоставьте подробную информацию о выбранном GameObject в сцене.

Assets / Project: здесь хранятся все префабы, текстуры, модели, скрипты и т. Д.

Иерархия: позволяет вложение и структурирование игровых объектов внутри сцены.

Теперь мы готовы начать!

Объекты Unity Game

Что такое GameObjects

Если у вас есть опыт веб-дизайна, вы можете думать о GameObjects как о элементах

! Чрезвычайно скучные контейнеры, но они легко расширяемы для создания сложной функциональности или визуальных эффектов.

Буквально все, от эффектов частиц, камер, игроков, элементов пользовательского интерфейса… (список продолжается) — это GameObject.

Создание иерархии

для создания разнообразных и желаемых макетов или абстракций, вы можете сделать то же самое с игровыми объектами.Логика вложения игровых объектов во многом такая же, как и при веб-разработке, я приведу несколько примеров …

Беспорядок и эффективность

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

Позиционирование

Unity Translation: вы создали группу дронов-помощников, которые летают вокруг игрока. На самом деле вы бы не стали писать код, чтобы они гонялись за игроком, поэтому вместо этого вы создаете их как дочерние элементы игрового объекта player.

Встроенные компоненты Unity

Компонентная модель актера

Unity работает на основе модели компонентов акторов, проще говоря, GameObjects — это актеры, а компоненты — ваши скрипты.

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

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

Ключевые встроенные компоненты

Думаю, пришло время привести несколько примеров встроенных компонентов, предоставляемых движком Unity Games.

  • MeshFilter: позволяет назначать материалы для 3D-сетки GameObject.
  • MeshRender: позволяет назначать материалы 3D-сетке.
  • [Коробка | Mesh] Collider: позволяет обнаруживать GameObject во время столкновений.
  • Rigidbody: позволяет реалистичному физическому моделированию воздействовать на GameObjects с 3D-сетками и запускать события обнаружения на коллайдерах боксов.
  • Свет: освещает части вашей сцены.
  • Камера: определяет область просмотра игрока, которая будет прикреплена к GameObject.
  • Различные компоненты холста пользовательского интерфейса для отображения графического интерфейса пользователя

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

Создание пользовательских компонентов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Доступ к другим игровым объектам и компонентам

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

Доступ через переменную инспектора

Это самый простой способ. Просто создайте общедоступную переменную для GameObject, как мы продемонстрировали ранее с префабами, и вручную перетащите ее на компонент через инспектор. Затем перейдите к переменной, как указано выше.

Доступ через теги

Мы можем пометить GameObjects или prefabs через инспектор, а затем использовать функции поиска игровых объектов, чтобы найти ссылки на них.

Доступ через преобразование

Доступ через SendMessage

Raycasting

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

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

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

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

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

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

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

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

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

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

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

Анимация

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

Материалы и PBR

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

Совет новичкам по Unity

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

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

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

Хорошие ресурсы для разработки игр в Unity

Сообщество разработчиков игр — одно из лучших среди всех, и в индустрии есть множество высококвалифицированных профессионалов, которые размещают контент бесплатно или почти бесплатно. В этой области требуются 3D-моделисты, концептуальные художники, геймдизайнеры, программисты и так далее. Я связал несколько отличных общих ресурсов, с которыми я столкнулся, для каждого из этих полей ниже:

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

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

Для начала подготовим сцену, добавим поверхности, стены и сам физический объект в виде ящика. Также добавляем ящику коллайдер BoxCollider2D и компонент Rigidbody2D .


Создаем новый скрипт Box , добавляем в него float переменную explodeForce, в которой будет указана сила взрыва ящика.

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

  1. publicclass Box : MonoBehaviour
  2. [ Range ( 0 , 1000 )]
  3. publicfloat explodeForce = 100 ;
  4. publicvoid Explode ()
  5. >
  6. >

Сохраняем этот скрипт и возвращаемся в редактор. Чтобы не писать целый отдельный обработчик нажатий мыши по ящику, воспользуемся уже готовым инструментом под названием Physics 2D Raycaster . Этот компонент позволяет обрабатывать нажатия на физические объекты, что находятся на сцене. Добавим камере этот новый компонент ( Physics 2D Raycaster ).


и дополнительно создаем новый объект EventSystem , без которого обработчик нажатий ( Physics 2D Raycaster ) не сможет работать.


Теперь мы можем отловить любые действия мыши над любым физическим объектом, для этого достаточно добавить этому объекту компоненте Event Trigger и выбрать нужное действие.

Так и сделаем – выбираем ящик, добавляем новый компонент Event Trigger


после чего выбираем действие, нажав кнопку Add New Event Type .


Для обработки нажатия можно выбрать событие PointerClick и добавить нужное действие, в нашем случае это действие взрыва Explode .


Возвращаемся в скрипт Box и теперь поработаем над физикой взрыва.

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

Теперь разобьем эту задачу на части:

  1. Получить список всех ящиков на сцене вокруг взрыва.
  2. Рассчитать расстояние и силу взрыва для каждого ящика отдельно.
  3. Приложить рассчитанную силу и направление движения для каждого отдельного ящика с помощью компонента Rigidbody2D .
  4. Уничтожить разорвавшийся ящик.

Для начала в методе Awake скрипта Box получим компонент Rigidbody2D самого ящика.

  1. publicclass Box : MonoBehaviour
  2. [ Range ( 0 , 1000 )]
  3. publicfloat explodeForce = 100 ;
  4. private Rigidbody2D body ;
  5. privatevoid Awake ()
  6. this . body = GetComponent Rigidbody2D >();
  7. >
  8. publicvoid Explode ()
  9. >
  10. >

Переходим к первому пункту задачи – необходимо получить список всех ящиков, стоящих рядом. Для этого воспользуемся специальным статическим методом OverlapCircleAll класса Physics2D , который вернет все коллайдеры, что находятся рядом.

  1. private Rigidbody2D body ;
  2. publicvoid Explode ()
  3. Vector2 position = this . body . position ;
  4. Collider2D [] colliders = Physics2D . OverlapCircleAll ( position, 3 );
  5. >

Для примера, попробуем найти все объекты в радиусе 3 ед . от взрыва. Теперь с помощью цикла переберем все объекты из полученного списка colliders .

  1. private Rigidbody2D body ;
  2. publicvoid Explode ()
  3. Vector2 position = this . body . position ;
  4. Collider2D [] colliders = Physics2D . OverlapCircleAll ( position, 3 );
  5. foreach ( Collider2D collider in colliders )
  6. Rigidbody2D other = collider . attachedRigidbody ;
  7. >
  8. >

Сперва необходимо уточнить, есть ли у выбранного объекта компонент Rigidbody2D , чтобы его получить у компонента Collider2D есть свойство attachedRigidbody .

  1. publicvoid Explode ()
  2. Vector2 position = this . body . position ;
  3. Collider2D [] colliders = Physics2D . OverlapCircleAll ( position, 3 );
  4. foreach ( Collider2D collider in colliders )
  5. Rigidbody2D other = collider . attachedRigidbody ;
  6. if ( other != null && other != this . body )
  7. >
  8. >
  9. >

Здесь мы выполняем даже две проверки: первая проверка на существование объекта Rigidbody2D , а вторая сравнивает, не является ли выбранный объект тем самым ящиком, который мы хотим взорвать. Переходим к следующему пункту задачи – рассчитываем силу и направления толчка. Чтобы вычислить направление от взрыва необходимо найти разность между позициями ящика и точкой взрыва.

  1. publicvoid Explode ()
  2. Vector2 position = this . body . position ;
  3. Collider2D [] colliders = Physics2D . OverlapCircleAll ( position, 3 );
  4. foreach ( Collider2D collider in colliders )
  5. Rigidbody2D other = collider . attachedRigidbody ;
  6. if ( other != null && other != this . body )
  7. Vector2 direction = ( other . position – position ). normalized ;
  8. >
  9. >
  10. >

В переменную direction записываем направление движения ящика от взрыва. Далее необходимо рассчитать дальность нахождения ящика от центра взрыва, так как в зависимости от расстояния будет меняться и сила толчка.

  1. publicvoid Explode ()
  2. Vector2 position = this . body . position ;
  3. Collider2D [] colliders = Physics2D . OverlapCircleAll ( position, 3 );
  4. foreach ( Collider2D collider in colliders )
  5. Rigidbody2D other = collider . attachedRigidbody ;
  6. if ( other != null && other != this . body )
  7. Vector2 direction = ( other . position – position ). normalized ;
  8. float distance = ( other . position – position ). sqrMagnitude ;
  9. >
  10. >
  11. >

В переменной distance получаем квадрат расстояние ящика от центра взрыва, после чего можно приступать к расчету силы толчка.

  1. publicvoid Explode ()
  2. Vector2 position = this . body . position ;
  3. Collider2D [] colliders = Physics2D . OverlapCircleAll ( position, 3 );
  4. foreach ( Collider2D collider in colliders )
  5. Rigidbody2D other = collider . attachedRigidbody ;
  6. if ( other != null && other != this . body )
  7. Vector2 direction = ( other . position – position ). normalized ;
  8. float distance = ( other . position – position ). sqrMagnitude ;
  9. Vector2 force = direction * this . explodeForce * this . body . mass / distance ;
  10. >
  11. >
  12. >

Для получения силы взрыва сперва умножаем направление толчка direction на силу взрыва explodeForce , далее умножаем полученное значение на массу объекта, ведь чем больше масса объекта тем сильнее взрыв, после чего делим все полученное значение на квадрат расстояния distance , так как чем дальше объект тем слабее сила взрыва.

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

Для того, чтобы приложить силу к физическому объекту относительно его положения на сцене воспользуемся методом AddForceAtPosition компонента Rigidbody2D .

  1. publicvoid Explode ()
  2. Vector2 position = this . body . position ;
  3. Collider2D [] colliders = Physics2D . OverlapCircleAll ( position, 3 );
  4. foreach ( Collider2D collider in colliders )
  5. Rigidbody2D other = collider . attachedRigidbody ;
  6. if ( other != null && other != this . body )
  7. Vector2 direction = ( other . position – position ). normalized ;
  8. float distance = ( other . position – position ). sqrMagnitude ;
  9. Vector2 force = direction * this . explodeForce * this . body . mass / distance ;
  10. other . AddForceAtPosition ( position, force, ForceMode2D . Impulse );
  11. >
  12. >
  13. >

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

После чего завершаем выполнение задачи и удаляем со сцены взорвавшийся ящик.

  1. publicvoid Explode ()
  2. Vector2 position = this . body . position ;
  3. Collider2D [] colliders = Physics2D . OverlapCircleAll ( position, 3 );
  4. foreach ( Collider2D collider in colliders )
  5. Rigidbody2D other = collider . attachedRigidbody ;
  6. if ( other != null && other != this . body )
  7. Vector2 direction = ( other . position – position ). normalized ;
  8. float distance = ( other . position – position ). sqrMagnitude ;
  9. Vector2 force = direction * this . explodeForce * this . body . mass / distance ;
  10. other . AddForceAtPosition ( position, force, ForceMode2D . Impulse );
  11. >
  12. >
  13. Destroy ( this . gameObject );
  14. >

Сохраняем скрипт Box и переходим к тестированию.

Добавляем еще несколько ящиков на сцену.

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

Заключение

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

Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

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

Закрыт 10 месяцев назад .

Как сделать рывок в юнити3д.


1 ответ 1



Всё ещё ищете ответ? Посмотрите другие вопросы с метками unity3d или задайте свой вопрос.

Похожие

дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.1.24.41248

Читайте также: