Unity движение по окружности 2d

Вращение 2D объекта по окружности

Привет, если ты читаешь эту статью, значит ты хочешь узнать ответ на вопрос «как работает вращение объекта в 2D ?»

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

Если проще то наш алгоритм работает так.

Мы представляем окружность, где:

  1. Центр это точка, вокруг которой мы вращаем объект.
  2. Радиус — расстояние от центра до вращаемого объекта.

Итак, начнем.

Давайте взглянем на рисунок ниже:

Unity движение по окружности 2d

Дано: длинна радиуса, координаты точки вращения, угол АОВ, АВ перпендикулярен оси ОХ.
Задача: Задать вращение точки А на 360 градусов с помощью формулы.
Рассмотрим: треугольник ОАВ:
угол ОВА — прямой => треугольник ОАВ — прямоугольный треугольник;
тогда:
гипотенуза = радиусу окружности с центром в точке О
угол поворота = от 1 до 360 градусов
тогда чтобы найти катеты ОВ и АВ нужно:
АВ = радиус * cos(угла поворота),
ОВ = $inline$радиус * sin(угла поворота)$inline$
Теперь когда мы знаем размеры катетов
мы составим формулу:
для координаты по x:$inline$позиция по x = радиус * cos(угла поворота) + начальная позиция по x$inline$,
и для координаты по y: $inline$позиция по y = радиус * sin(угла поворота) + начальная позиция по y$inline$

Давайте попробуем применить формулы:

Не сложно догадаться что делает этот код, а именно вращает наш кружок по оси, но почему лишь один раз?

Давайте вспомним уроки геометрии в седьмом классе: градусная мера угла не может превышает 360 градусов.

А если попробуем обнулять угол вращения, когда тот будет больше 360 градусов, давайте посмотрим что из этого выйдет:

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

Однако у этой формулы есть один недостаток: можно вращать объекты только на 1 оборот. Это значит что нам нужна другая формула.

Давайте улучшим нашу формулу: Unity движение по окружности 2d

Дано:
треугольник ОАВ — прямоугольный
катет 1 = x1 — начальная координата X
катет 2 = y1 — начальная координата y

Задача:
улучшить формулу так, что-бы можно было вращать точку А на неизвестный угол.

Решение:
Из предыдущей задачи мы знаем что:
$inline$$inline$xPos = (lineLong * cos(a)) + StartPosX$inline$$inline$. => $inline$cos(a) = xPos — startPosX: (lineLong )$inline$

И теперь мы можем вывести формулу по нахождению угла a
$inline$yPos = (lineLong * sin(a)) + StartPosY$inline$ => $$display$$a = arccos((xPos — startPosX): lineLong)$$display$$.

А сейчас обновим нашу формулу и получим: $$display$$xPos = (lineLong * cos(a +b)) + startPosX$$display$$

Теперь у нас есть формула которая позволяет бесконечно вращать точку по окружности: $$display$$xPos = (lineLong * cos(a +arccos((xPos — startPosX): lineLong))) + startPosX$$display$$

Давайте напишем код, который будет вращать наш объект по нажатию на клавишу.

Примерно таком образом решается эта задача.

Надеюсь, ты смог извлечь полезную информацию из моего поста, желаю удачно применить полученные знания на практике

Содержание
  1. Unity движение по окружности 2d
  2. Приступая к работе
  3. Различные типы движений в играх
  4. Движение в 2D против 3D
  5. Понимание трансформации игровых объектов
  6. Реализация движения в двумерной игре-платформере
  7. Настройка игровой сцены
  8. Добавление движения
  9. Настройка движения
  10. Реализация Animator Controller
  11. Написание скрипта движения для 2D-платформера
  12. Перемещение Катто вправо и влево
  13. Даем Катто способность прыгать
  14. Завершение движения
  15. Добавление условий к движению
  16. Отражение спрайта Катто
  17. Отражение спрайта Катто в соответствии с его движениями
  18. Кодирование 2D-движения с видом сверху
  19. Подключение элементов
  20. Написание 2D скрипта движения с видом сверху
  21. Нажатие мышью в 3D для вращения и перемещения
  22. Подключение элементов
  23. Добавление NavMesh Agent
  24. Написание скрипта для поворота и перемещения
  25. 3D движение танка
  26. Подключение элементов
  27. Написание скрипта движения танка
  28. Поворачивание Катто
  29. Перемещение Катто
  30. Куда двигаться дальше?
  31. Please wait.
  32. We are checking your browser. pechenek.net
  33. Why do I have to complete a CAPTCHA?
  34. What can I do to prevent this in the future?
  35. 🎦 Видео

Видео:Движение по пути - гибкий вариант - Unity легкоСкачать

Движение по пути - гибкий вариант - Unity легко

Unity движение по окружности 2d

Главная » Как реализовать движение в разных игровых жанрах в Unity

Как реализовать движение в разных игровых жанрах в Unity

В этом очень «подвижном» уроке вы узнаете, как реализовать движение в разных игровых жанрах на движке Unity — как в 2D, так и в 3D.

Версия: C# 7.3, Unity 2019.3, Unity

Люди склонны ожидать определенные виды движений в определенных играх. Если вы играете в платформер, то вы ожидаете, что сможете бегать и прыгать персонажем. Если играете в клон «Diablo» , то ожидаете движение от указателя мыши и нажатия на кнопку мыши, чтобы перемещать игровых персонажей. Поэтому, если вы разрабатываете игру, неплохо было бы узнать об этих правилах движения… даже если это просто для того, чтобы ваша умопомрачительная игра могла их нарушить!

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

  • 2D-платформер
  • 2D-игра с видом сверху
  • 3D-игра, в которой применяется движение мышью
  • 3D-игра с движением танка

Примечание. В этом уроке предполагается, что у вас есть базовые знания Unity и небольшой навык написания кода. Если вам нужно изучить основы, то почитайте «Начало работы с Unity» и «Введение в создание скриптов в Unity».
Также для этого урока необходим установленный редактор Unity версии 2019.1.3 или выше.

Приступая к работе

Скачайте проект, используя кнопку «Скачать материалы урока», которая находится в начале страницы, затем распакуйте файлы и откройте проект в Unity. Проверьте структуру папок в окне Project:

Unity движение по окружности 2d

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

  • Модели
  • Префабы
  • Сцены
  • Скрипты
  • Текстуры

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

Различные типы движений в играх

Хотя есть различия между игровыми жанрами и типами движений, которые они используют, эти два понятия настолько тесно связаны, что люди часто их путают. Это не означает, что у вас не может быть игры в стиле «Resident Evil» , где персонаж может летать, например, но помните, что ограниченное движение — это часть того, что делает подобные игры пугающими.

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

Движение в 2D против 3D

Совершенно реальные 2D-миры невозможны. 2D и 3D — это просто модели, нарисованные для отражения восприятия людей. Проверьте, как выглядит Катто в 2D и 3D:

Unity движение по окружности 2d

В этом уроке вы будете работать как с 2D так и с 3D движением. Но сначала вам нужно узнать об одном важном представлении: трансформации объектов в Unity.

Понимание трансформации игровых объектов

Инструмент Transform состоит из 3 компонентов. Position — в основном представляет собой точку в трехмерном пространстве. Rotation — определяет ориентацию объекта в трехмерном пространстве. И компонент Scale — определяет размер игрового объекта.

Unity движение по окружности 2d

В Юнити вы можете видеть три компонента инструмента Transform следующим образом:

Unity движение по окружности 2d

Обратите внимание, что у значений Position, Rotation и Scale также есть значения X, Y и Z. Каждый набор значений X, Y и Z известен как Vector3.

Теперь, когда у вас есть эта информация, вы можете переходить к первому типу игры: 2D-платформеры.

Реализация движения в двумерной игре-платформере

В качестве первого шага вы поработаете над созданием движения в 2D-платформере. Вот некоторые примеры опубликованных игр в этом жанре: Super Mario Bros., Sonic, Castlevania, Ghouls ‘n Ghosts, Rayman Legends, Mega Man, Metroid и Ninja Gaiden.

Многие думают, что платформеры проще всего программировать просто потому, что они выглядят простыми. Персонаж прыгает с одной платформы на другую, насколько это может быть сложно, правда? На самом деле, 2D платформеры сегодня могут быть очень сложными. Скоро вы поймете почему.

Настройка игровой сцены

Откройте сцену в RW/2D Platformer Movement/Scenes.

Это окно Hierarchy:

Unity движение по окружности 2d

Разверните Player Objects. Вы поработаете с PaperCatto.

Если вы не видите PaperCatto в окне Scene, то вот простая хитрость: выберите его в окне Hierarchy, нажмите на кнопку F в окне Scene, затем нажмите на кнопку 2D View.

Unity движение по окружности 2d

Добавление движения

Есть два типа движений:

  • Движение при помощи Translation — это движение от точки к точке в физическом пространстве. Другими словами, персонаж двигается из позиции A в позицию B .
  • Эмоциональное движение — это не технический термин, но вы будете использовать его в данном уроке, чтобы охватить движения, которые делает персонаж без использования первого метода. Например, жесты, дыхание и размахивание руками — это движения, которые передают намерения или чувства, поэтому такое название.

Выбрав PaperCatto, придайте Катто некоторые физические свойства. Это позволит ему передавать движения и перемещаться. Добавьте компонент Rigidbody 2D:

Unity движение по окружности 2d

Чтобы Катто проявлял чувства и выражал позу, добавьте компонент Animator:

Unity движение по окружности 2d

И наконец, Котто нужен компонент Box Collider 2D, чтобы была возможность сталкиваться с другими объектами:

Unity движение по окружности 2d

Теперь нажмите кнопку Play.

Unity движение по окружности 2d

Упс, это выглядит неудобно! По крайней мере, это работает.

Настройка движения

Итак, Катто теперь может двигаться, но вам все еще нужно сделать некоторые исправления, чтобы заставить его двигаться правильно. Разверните компонент Box Collider 2D и нажмите на кнопку Edit Collider.

Unity движение по окружности 2d

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

Unity движение по окружности 2d

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

Измените параметр Gravity Scale на 2 в компоненте Rigidbody 2D. Он контролирует величину силы тяжести, которая применяется к Катто. Низкое значение, например 1, заставило бы Катто прыгать очень высоко, как если бы Катто был на Луне. Например, 2 делает силу прыжка в этом конкретном случае большее естественной.

Unity движение по окружности 2d

И наконец, в разделе Constraints убедитесь, что отметили Freeze Rotation Z. Это предотвратит падение Катто во время бега.

Реализация Animator Controller

Последнее, но не менее важное: подключите компонент Animator Controller. Выбрав PaperCatto, разверните Animator, затем выберите PaperCatto в качестве контроллера:

Unity движение по окружности 2d

Нажмите Play и… Вуаля! Разве это не самая красивая бумажная кошка, которую вы когда-либо видели?

Unity движение по окружности 2d

Написание скрипта движения для 2D-платформера

Итак, PaperCatto двигается, но вам все еще нужно, чтобы он правильно реагировал на пользовательский ввод. Чтобы сделать это, понадобится скрипт.

Представьте, что вы хотите создать игру в стиле Super Mario Bros. с Катто в главной роли. Какое движение вам нужно? Что ж, вам нужно будет водить Катто по осям X и Y и поворачивать его:

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

Unity движение по окружности 2d

Здесь Катто перемещается по оси X, двигаем его слева направо и обратно:

Unity движение по окружности 2d

Здесь Катто вращается вокруг оси Y, поворачиваем его слева направо и обратно:

Unity движение по окружности 2d

Примечание. Вместо вращения Катто вокруг оси Y, чтобы перевернуть его слева направо, вы также можете масштабировать его по оси X, где -1 перевернет его влево, а 1 — вправо».

Перемещение Катто вправо и влево

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

Начните с перетаскивания файла CattoMovement.cs в PaperCatto, чтобы добавить скрипт в качестве нового компонента:

Unity движение по окружности 2d

Следующий шаг — написать скрипт.

Дважды нажмите на CattoMovement.cs, чтобы изменить его.

В скрипте будут три главные группы переменных. Первая группа сохраняет компоненты. Добавьте эти две строчки в позицию //1:

Эти две строчки кода содержат информацию для перемещения и анимации Катто соответственно.

Здесь вы структурируете переменные в соответствии с логикой «Защита, Тип и Имя»:

Unity движение по окружности 2d

Обратите внимание, что чем проще имена переменных, тем легче их читать.

Чтобы использовать компоненты Animator и Rigidbody 2D вы должны указать Unity запомнить их. Итак, теперь вы должны сообщить Юнити, что делать и где найти эту информацию.

Добавьте следующий код, чтобы метод Start выглядел следующим образом:

Эти две строчки сообщают Unity: «Привет, Юнити, cattoRigidbody2D — это компонент Катто, так что найди его там и пожалуйста, запомни. Затем сделай то же самое с cattoAnimator .»

Теперь вам нужно отслеживать состояние Катто. Например, вам нужно знать касается ли Катто поверхности или прыгает.

Вторая группа сохраняет логические значения. Добавьте следующие строчки кода в позицию //2:

Переменная логического типа cattoIsFacingRight проверяет, действительно ли Катто смотрит в этом направлении. Переменная cattoIsJumping отслеживает, находится ли персонаж в воздухе, а cattoIsGrounded отслеживает, соприкасается ли он с поверхностью. Оба они по умолчанию имеют значение false .

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

Даем Катто способность прыгать

Эта последняя группа переменных хранит ввод и специальный компонент, позволяющий прыгать. Добавьте эти шесть переменных в позицию // 3:

Переменная groundCheck использует groundCheckRadius , чтобы оценить, находится ли Катто на поверхности.

LayerMask — удобный инструмент Unity для разделения и упорядочивания мирового пространства на уровни. На простом английском языке говорится: «Эй, Юнити, эти два объекта находятся в одном пространстве, поэтому они должны взаимодействовать друг с другом». В этом случае Катто и поверхность находятся в одном пространстве, поэтому они сталкиваются.

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

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

Катто не найдет Ратто, если не сможет двигаться, поэтому так держать!

Завершение движения

Впереди две задачи: проверить, действительно ли Катто находится на поверхности, и проверить ввод с клавиатуры.

Добавьте следующий строчки кода в метод Update :

Physics2D.OverlapCircle — удобная встроенная функция, которая информирует Unity, когда два объекта сталкиваются в заданной области. Вы объявили две переменные groundCheck и groundCheckRadius , чтобы воспользоваться преимуществами этой функции.

Переменная moveInput кеширует горизонтальную ось клавиатуры. Популярная викторина: знаете ли вы, какой тип у этого значения?

Да! Это тип float . Что коррелирует с X-компонентом Vector3.

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

Добавление условий к движению

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

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

Это переводится как «Если cattoIsGrounded равно true , то установить Velocity аниматора на значение moveInput . Хотя moveInput может быть положительным, оно также может быть и отрицательным, поэтому используйте Math.Abs , чтобы moveInput оставалось положительным. Спасибо, C#, пока».

Добавьте второе условие следующим образом:

Оператор if проверяет, нажал ли игрок на кнопку прыжка и находится ли Катто на поверхности. Если так, то Unity будет рассматривать это как истину. Если оба значения истинны, то переменной cattoIsJumping будет установлено значение true .

И наконец, как и прежде, этот код говорит: «Эй, Юнити, возьми Animator и установи триггер Jump так, чтобы Катто выглядел так, как будто он прыгает».

Вот третье условие:

В этот раз, вы проверяете, нажал ли игрок на кнопку со стрелкой вниз и имеет ли переменная cattoIsGrounded значение true .

Если это так, то вы говорите: «Эй, Юнити, пожалуйста, перейди к cattoAnimator и установи логическую переменную Crouch на значение true , чтобы Катто выглядел так, как будто приседает. Спасибо».

И для последнего условия:

Если игрок только что отпустил кнопку со стрелкой вниз, перейдите cattoAnimator и установите Crouch на значение false . Это заставит Катто снова встать.

Вы только что выполнили несколько очень важных движений: ходьба, прыжки, приседание и снова вставание. Далее вы сделаете что-то еще более интересное!

Отражение спрайта Катто

На следующем этапе вы напишите специальную функцию под названием FlipCatto . Угадайте, что она делает!

Добавьте следующий код:

Обратите внимание, что вы устанавливаете переменной cattoIsFacingRight противоположное значение каждый раз, когда вызываете функцию.

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

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

Проще простого, не так ли?

Отражение спрайта Катто в соответствии с его движениями

С этого момента код находится внутри метода FixedUpdate , так как именно здесь Unity рассчитывает физику.

Добавьте следующий код:

Здесь вы устанавливаете вектор скорости компонента Rigidbody 2D. Чтобы перемещаться влево и вправо, вы устанавливаете ось X как moveInput с клавиатуры со скоростью cattoSpeed , оставляя ось Y нетронутой. Сейчас персонаж прыгнет.

Вы выполнили три последних условия!

Сначала добавьте эти два оператора if ниже:

На английском языке первое выражение гласит: «Если Катто смотрит не в правильном направлении, и кто-то нажимает клавишу, чтобы переместиться вправо: переверните Катто.» Оператор else if противоположен: «Если Катто смотрит вправо и ввод указывает налево: переверните Катто».

Теперь, для последней настройки, добавьте этот код ниже:

В этой части просто используется встроенная в Unity функция под названием AddForce . Вы добавляете силу специально по оси Y компоненту Rigidbody2D . Обратите внимание, что вы проверяете, прыгает ли Катто прежде чем делать что-либо еще.

Наконец, вы устанавливаете переменной cattoIsJumping значение false. Так что следующий раз он окажется на поверхности и сможет прыгать.

Вернитесь в окно Hierarchy, найдите CheckGround внутри PaperCatto и перетащите этот объект в окно Inspector.

Попробуйте установить следующие значения:

  • Ground Check Radius = 0.07
  • Ground = Ground
  • Catto Speed = 6.11
  • Catto Jump Force = 550

Unity движение по окружности 2d

Последняя настройка. Перейдите к CheckGround и установите его позицию на -1.18 по оси Y:

Unity движение по окружности 2d

И наконец, нажмите на кнопку Play и удивитесь этой кошачьей натуре!

Unity движение по окружности 2d

Кодирование 2D-движения с видом сверху

Движение с видом сверху — это когда игрок воспринимает одну из осей движения как плоскую. То есть, вы воспринимаете Катто, идущим на заднем плане, когда нажимаете вверх. Сравните это с PaperCatto, который прыгает на месте, когда вы нажимаете вверх.

Среди выпущенных игр этого жанра: Bomberman, Golden Axe Warrior, The Legend of Zelda, BattleShip and HALO Spartan Assault.

Подключение элементов

Откройте сцену в RW / 2D TopDown Movement / Scenes.

Теперь в окне Hierarchy выберите Player Objects > Catto > Catto, тот, у которого есть Sprite Renderer.

Добавьте в окне Inspector следующие элементы:

  1. Rigidbody 2D
  2. Box Collider 2D
  3. Animator

Вот вам вызов: попробуйте добавить эти элементы самостоятельно. Если у вас возникли проблемы, воспользуйтесь этой помощью:

Unity движение по окружности 2d

Компонент Animator не будет работать без параметра Controller. Итак, перейдите в 2D TopDown Movement / Models / Catto и найдите контроллер CattoAnimator. Перетащите его в параметр Controller компонента Animator в окне Inspector:

Unity движение по окружности 2d

Нажмите Play и … Катто падает. Чтобы это исправить, вам нужно настроить Rigidbody 2D. Гравитация заставляет Катто падать, поэтому установите для свойства Gravity Scale значение 0 и повторите попытку.

Unity движение по окружности 2d

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

Написание 2D скрипта движения с видом сверху

Перейдите в 2D Top Down Movement / Scripts и перетащите TopDownMovement.cs в Catto. Вы также можете сделать это:

Unity движение по окружности 2d

Идеально! Дважды щелкните на скрипт в окне Inspector, чтобы отредактировать его. Этот скрипт кажется намного проще предыдущего.

Теперь добавьте эти три переменные:

В методе Start вы указываете Unity что делать с cattoAnimator. Используйте GetComponent , чтобы редактор Unity связал имя cattoAnimator с Animator, прикрепленным к игровому объекту.

Добавьте этот код:

Так же как раньше используйте Update для получения ввода с клавиатуры. Добавьте этот код:

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

Это будет примерно так:

Unity движение по окружности 2d

Три вызова cattoAnimator используют SetFloat , встроенную функцию Unity. По сути, это переводится как: «Эй, Unity, поищи Horizontal в cattoAnimator . Как только это сделаешь, передай значение movement в функцию».

В данном случае, movement.x — это просто компонент оси X . То есть:

Unity движение по окружности 2d

А что насчет последнего вызова? Какая величина?

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

Почти готово… Не забудьте установить Velocity в окне Inspector. 3 — хорошее значение для начала.

Нажмите Play и …

Unity движение по окружности 2d

Готово! Но подождите, это еще не все.

Перейдите в 2D TopDown Movement/Scripts и добавьте CollectCoins.cs к Катто. Теперь вы действительно можете играть в игру.

Превосходно! Вы закончили движение в 2D-игре с видом сверху.

Нажатие мышью в 3D для вращения и перемещения

Добро пожаловать в 3D-миры! С этого момента все игры, которые мы будем рассматривать, будут в трехмерном пространстве.

Игры с нажатием мышью и указанием курса для поворота и движения используют тип движения как в игре «Diablo», когда вы нажимаете на что-нибудь, чтобы получить контекстную информацию и/или двигаться в определенное место.

Другие примеры выпущенных игр в этом жанре: League of Legends, Age of Empires, Grim Fandango and Monkey Island.

Подключение элементов

Откройте сцену в 3D ClickToRotate Movement / Scene.

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

  • Box Collider
  • Rigidbody
  • Animator

Вот как это сделать:

Unity движение по окружности 2d

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

Unity движение по окружности 2d

Разверните Rigidbody в окне Inspector. Перейдите в Constraints, затем заморозьте вращение по осям X , Y и Z , установив флажки.

Чтобы подключить CattoAnimator, разверните Animator в окне Inpector. Перейдите к 3D ClickToRotate Movement/Models/Catto/Animator и перетащите его в Controller.

Вы можете сделать то же самое для Avatar или просто подключите его в окне Inspector:

Unity движение по окружности 2d

Наконец, не забудьте отметить Apply Root Motion.

Вот как выглядит финальный результат:

Unity движение по окружности 2d

Нажмите на кнопку Play. Катто покажет стандартную анимацию ожидания, хотя он еще не может двигаться.

Unity движение по окружности 2d

Итак, теперь вы настроили Катто для анимации. Далее вы заставите его двигаться!

Добавление NavMesh Agent

Есть специальный модуль, который нужен Катто, он называется NavMesh: Nav для навигации, Mesh для … э … mesh: V. Серьезно, это сетка: очень примитивная форма, в которой хранится информация о расстоянии, положении и других простых вычислениях.

Agent — это программа, которая автоматически выполняет определенные задачи.

NavMesh Agent для работы нужен NavMesh

Найдите Nav Mesh Agent в окне Inspector и добавьте его к Катто. Следующие настройки работают прекрасно:

Unity движение по окружности 2d

Не бойтесь экспериментировать, особенно с параметрами steering.

Примечание: в этой сцене уже есть NavMesh. Если вы хотите создать свой собственный, вкладка навигации находится под Window > AI > Navigation.

Написание скрипта для поворота и перемещения

Откройте ClickToMove.cs в папке 3D ClickToRotate Movement/Scripts.

Добавьте следующую строчку кода в начало файла:

Это дает вам доступ к NavMeshAgent .

Затем добавьте три переменные в начало класса:

На этот раз вы пишите переменную типа NavMeshAgent . Но вы уже знаете, как это работает.

Как и раньше, вы инициализируете переменные в методе Start :

Есть обязательная функция для игр, использующих перемещение при помощи мыши: Physics.Raycast .

Добавьте этот код в метод Update :

Что тут происходит? Когда игрок нажимает левую кнопку мыши, текущее положение курсора мыши на экране (2D-координата) преобразуется в луч при помощи ScreenPointToRay . Затем луч переносится в 3D-сцену с помощью Physics.Raycast , техники, известной как проверка попадания. Ключевое слово out указывает, что результаты попадания должны храниться в предоставленном параметре hit .

И наконец, вы устанавливаете для cattoNavigation.destination значение hit.point , как только луч проверки попадает во что-то, что должно быть там, где была нажата мышь в трехмерном пространстве.

Вызов cattoAnimator , как вы видели ранее, запрашивает анимацию ходьбы.

Говоря простым языком, «Эй, Unity, выстрели лучом, в который я щелкнул, и установи пункт назначения Катто на то место на земле, куда попадет этот луч».

Последний if сравнивает расстояние между двумя точками: где вы щелкнули и где Катто должен остановиться. Вы можете изменить это значение в окне Inspector.

Добавьте скрипт ClickToMove к Катто и запустите игру. Следуйте по пути, чтобы найти Ратто!

Unity движение по окружности 2d

Поздравляю! Вы узнали, как перемещать персонажа в трех разных типах игры. Остался еще один.

3D движение танка

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

Во всяком случае, вот вкратце о танковом движении:

  1. Клавиша вверх — это всегда направление вперед для игрока, от перспективы персонажа.
  2. Когда вы нажимаете влево или вправо, персонаж совершает неподвижный поворот.

Выпущенные игры этого жанра: Resident Evil, Back in 1995 и Silent Hill

Подключение элементов

Откройте сцену в RW / 3D Tank Movement / Scenes.

Выберите Tankatto в окне Hierarchy под Player Objects.

Вы уже знаете строевую подготовку на данный момент. Можете ли вы придумать компоненты для этого в 3D?

Танкатто нужен Box Collider для взаимодействия с миром и Rigidbody, которым будет управлять и двигать игрок.

Вот наглядное пособие:

Unity движение по окружности 2d

Не забудьте отредактировать коллайдер:

Unity движение по окружности 2d

Перейдите в 3D Tank Movement / Scripts и перетащите TankMovement.cs на Tankatto. Затем откройте его, чтобы отредактировать.

Вот как это должно выглядеть после добавления остальных компонентов:

Unity движение по окружности 2d

Написание скрипта движения танка

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

Добавьте эти переменные в начало скрипта:

Вызов: какой компонент вы будете кэшировать при выполнении метода Start ?

Да, это компонент tankRigidBody .

Еще одна мини-задача: где бы вы кэшировали turnInput и movementInput ?

Правильно, в методе Update .

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

Поворачивание Катто

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

Добавьте эти короткие строчки кода в метод FixedUpdate :

Как видите, названия функций представляют их действия.

Теперь добавьте весь код, чтобы сделать Turn() красивой отдельной функцией:

Что здесь происходит?

Учтите, что turnInput и turnSpeed считываются несколько раз в секунду. Вы должны взять ситуацию под контроль.

Итак, вы передаете turnInput , умножаете его на turnSpeed , чтобы получить хорошее число, а затем ограничиваете временной цикл примерно секундой с помощью Time.deltaTime .

Примечание. В Unity есть также fixedDeltaTime , но объяснение выходит за рамки данного проекта.

Такой расчет дает вам уточненное число, которое вы просто называете turn .

На изображении ниже указан порядок выполнения:

Unity движение по окружности 2d

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

Функция Unity MoveRotation (Quaternion rot) заставляет вас использовать Quaternion. Но подождите, разве вращения не являются Vector3 в Unity, как сказано в начале урока?

Unity решает эту проблему за вас. Quaternion.Euler берет три числа: X , Y и Z .

В этом контексте, можете ли вы угадать, по какой оси вы вращаете Катто?

Если вы угадали Y , то вы правы!

У вас уже есть число … число в turn . Итак, передайте его как Y в Quaternion.Euler (X, Y, Z) .

Это выглядит так: Quaternion.Euler (0, turn, 0) .

Последняя функция MoveRotation берет текущее вращение Танкатто и умножает его на только что вычисленное turnRotation . Взгляните на порядок выполнения:

Unity движение по окружности 2d

Перемещение Катто

Теперь последний шаг: заставить Танкатто двигаться вперед. Для начала создайте новую функцию с именем Move() следующим образом:

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

Как и раньше, вы сохраняете переменную, которая содержит ввод с клавиатуры, скорость, которую вы определили с помощью Inspector и Time.deltaTime .

Тогда почему на этот раз переменная movement это Vector3 ? Это просто: transform.forward — это Vector3 (0, 0, 1) .

И наконец, MovePosition принимает параметр movement и добавляет его к текущему положению Танкатто.

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

  • Tank Speed = 6
  • Movement Speed = 40
  • Turn Speed = 60

Нажмите Play и проверьте, все ли работает так, как задумано.
Вы можете подумать: а где же самое интересное в перемещении и вращении танка?

Помните, что у Танкатто есть компонент Missile Logic в окне Inspector, но изучение того, как он работает, не входит в данный урок. Теперь, когда вы зашли так далеко, он нужен только для того, чтобы оживить ситуацию.

Нажмите кнопку мышки и посейте хаос!

Между прочим, вопреки тому, что некоторым кажется, ни одна крыса не пострадала при создании этого игрового жанра.

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

Куда двигаться дальше?

Поздравляем с окончанием урока! Помните, что вы можете получить готовый проект, нажав кнопку «Скачать материалы урока» вверху страницы.

Жанр попойки, детка! Попробуйте смешать два или более жанра в одной игре. Смешивание — лучший способ открыть для себя что-то новое. Например, попробуйте перенести PaperCatto в 3D Tank Movement, как если бы это была бумажная мишень. Также можно попробовать сделать движущиеся мишени.

Вы определенно захотите проверить это, чтобы повысить свою ци как разработчика игр:

Как создать игру Bomberman в Unity. Или, если вам нравятся видео, посмотрите эту впечатляющую серию статей Брайана Моакли «Основы C#».

Большое спасибо за чтение и выполнения урока по разным типам движения в Unity. Если у вас есть какие-либо вопросы или комментарии, не стесняйтесь присоединиться к обсуждению ниже!

Видео:Движение объекта по окружности Unity3dСкачать

Движение объекта по окружности Unity3d

Please wait.

Видео:Как сделать движение платформы по кругу - Unity легкоСкачать

Как сделать движение платформы по кругу - Unity легко

We are checking your browser. pechenek.net

Видео:Патрулирование 2D при помощи UNITY и C# - легкоСкачать

Патрулирование 2D при помощи UNITY и C# - легко

Why do I have to complete a CAPTCHA?

Completing the CAPTCHA proves you are a human and gives you temporary access to the web property.

Видео:#2 - Как научить персонажа двигаться в Unity 2DСкачать

#2 - Как научить персонажа двигаться в Unity 2D

What can I do to prevent this in the future?

If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware.

If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.

Another way to prevent getting this page in the future is to use Privacy Pass. You may need to download version 2.0 now from the Chrome Web Store.

Cloudflare Ray ID: 6cd8d3c71f4900a5 • Your IP : 85.95.179.65 • Performance & security by Cloudflare

🎦 Видео

Управление 2D персонажем в Unity 2D | Для новичков | Gamedev - Разработка игрСкачать

Управление 2D персонажем в Unity 2D | Для новичков | Gamedev - Разработка игр

Unity C#. Движение по траектории. Vector3 Lerp. Мусин Михаил.Скачать

Unity C#. Движение по траектории. Vector3 Lerp. Мусин Михаил.

Движение персонажа Unity 2D с нуляСкачать

Движение персонажа Unity 2D с нуля

[UNITY3D] 4 способа задать движение объектуСкачать

[UNITY3D] 4 способа задать движение объекту

2D контроллер движения персонажа в Unity - простой урокСкачать

2D контроллер движения персонажа в Unity - простой урок

Как сделать движение платформы по кругу?!Скачать

Как сделать движение платформы по кругу?!

как сделать движение платформы unity 2D вместе с персонажемСкачать

как сделать движение платформы unity 2D вместе с персонажем

Top down передвижение в UnityСкачать

Top down передвижение в Unity

Unity Движение во все стороны 2D объектаСкачать

Unity  Движение во все стороны 2D объекта

Как Unity упрощает разработку игр #1 - ФИЗИКА объектовСкачать

Как Unity упрощает разработку игр #1 - ФИЗИКА объектов

КАК ПРИВЯЗАТЬ КАМЕРУ К ГЛАВНОМУ ПЕРСОНАЖУ В UNITY 2D | КОРОТКИЙ ТУТОРИАЛСкачать

КАК ПРИВЯЗАТЬ КАМЕРУ К ГЛАВНОМУ ПЕРСОНАЖУ В UNITY 2D | КОРОТКИЙ ТУТОРИАЛ

Как задать движение объекту в unity 2020 | 6 способовСкачать

Как задать движение объекту в unity 2020 | 6 способов

УПРАВЛЕНИЕ В UNITY - 2D/2Д. 2023 Гайды, Уроки C#Скачать

УПРАВЛЕНИЕ В UNITY - 2D/2Д. 2023 Гайды, Уроки C#

Разрушение объектов ( движение персонажа - ближний бой #3 ) - Unity легкоСкачать

Разрушение объектов ( движение персонажа - ближний бой #3 ) - Unity легко

Делаем 2д игру на Unity №1 Передвижение персонажа и анимацияСкачать

Делаем 2д игру на Unity №1 Передвижение персонажа и анимация
Поделиться или сохранить к себе: