Движение по вектору в юнити

Способы передвижения компьютерных персонажей (часть 2)

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

Перемещение по вектору, один из способов реализации движения. Мир уже не разделен на клетки, и предоставляет куда больше свободы для передвижений. Координаты могут задаваться с большой точностью (не только целые, но и float значения), что позволяет реализовывать весьма реалистичные движения. Вектор – это направление, в котором будет осуществляться движение нашего агента. Проще всего его можно задать двумя значениями, например V(10,5). Это значит что при перемещении точки, находящейся в координате A(1,1) по вектору V(10,5) положение объекта будет находиться в A+V = C(1+10,1+5) = C(11,6). Значения вектора могут быть также отрицательными.

Для изменения направления движения достаточно сложить текущий вектор с новым. Например, имея вектор V1(2,6) мы хотим изменить его, прибавив вектор V2(3,-3), новый вектор движения будет V1+V2 = V3(2+3),6+(-3)) = V3(5,3). Графически это можно изобразить следующим образом:
Движение по вектору в юнити
Вернемся к передвижениям по вектору. Как уже говорил, чтобы переместить объект на определенный вектор, нужно сложить координаты объекта со значениями вектора: Pos(x,y)+V(a,b) = NewPos(x+a,y+b). Чем больше вектор – тем дальше переместиться наш объект. Это может создавать ряд трудностей, связанных с «проскакиванием» препятствий. Имея достаточно большой шаг, объект запросто может пропустить мелкие объекты. Существует много разных способов устранения этого недостатка, но они не входят в рамки статьи.
Движение по вектору в юнити
Все же такой подход вполне может иметь право на существование, и приведу пример реализации движения объекта по вектору. Сделаем класс вектор – содержащий два значения. И класс моб, который будет двигаться по заданному вектору. Для изменения вектора движения создадим функцию, куда будем помещать новый вектор.

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

  1. Перевести вектор в ненормализованный вид (умножить значения вектора на скорость).
  2. То же сделать с новым вектором, если это не было сделано ранее.
  3. Сложить векторы обычным способом.
  4. Вычислить длину получившегося вектора – это наша новая скорость.
  5. Нормализовать вектор.

В таком случае наш класс и функции добавления вектора и движения приобретают вид:

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

Ситуативный способ

У нашего моба есть вектор движения, по которому он будет двигаться до тех пор, пока не столкнется с препятствием. Тогда он изменит его определенным образом и продолжит движение, уже в новом направлении. Это можно реализовать обычными условиями, нейронными сетями и т.д. Просчеты столкновений в векторном мире немного сложнее, чем в плиточном, поэтому опустим их расчеты. Предположим, что есть некая функция, которая говорит нам, есть впереди препятствие или нет (bool CanMove()). В таком случае набором действий нашего моба может быть прибавление вектора, поворачивающего его в какую-нибудь сторону от препятствия, со скоростью, пропорциональной расстоянию до преграды (float DistanceToBarrier()). Функция движения приобретет вид:

Конечно вектор поворота в моем примере не совсем верный, потому что направления поворота при прибавлении вектора V(1,0) будет зависеть от текущего направления движения. Но суть, я думаю, понятна.

Целевые способы

Для реализации целевых способов используются так же шаблоны (заготовки), ключевые точки (waypoints) и т.д. Шаблоны представляют собой обычный массив векторов, по которым движется наш объект. Но каждый шаг обозначать своим вектором неудобно из-за размеров пути, поэтому используют ключевые точки. Суть заключается в том, чтобы агент двигался по вектору определенное время (до определенной точки), затем сменил направление движения на новый вектор, и так до следующей точки. Добавим массив точек и массив направлений, для удобства будем использовать один и тот же класс Vector.

Векторный способ имеет ряд преимуществ:

  1. Более плавные движения
  2. Естественные движения
  3. Возможность реализовать физику (трение, ускорение, вращения, притяжение, . )

Но можно выделить и ряд недостатков:

  1. Порой очень ресурсозатратно (вычисление корня в нормализации и т.д.)
  2. Сложные функции, требующие хорошего понимания основ (особенно что касается реализации физики)
  3. Сложности в получении информации об окружающем мире (нужно просчитывать столкновения со всеми потенциальными объектами)

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

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

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

Please wait.

Видео:Unity/C# Векторы, модуль, направлениеСкачать

Unity/C# Векторы, модуль, направление

We are checking your browser. pechenek.net

Видео:Векторы и Манипуляции с ними, Vector3 - Unity урокиСкачать

Векторы и Манипуляции с ними, Vector3 - Unity уроки

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.

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

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

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: 6d121fea7aa858ea • Your IP : 85.95.179.65 • Performance & security by Cloudflare

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

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

Как сделать управление персонажем на Unity 3D и 2D. Уроки Unity для детей

Мы покажем, как запрограммировать движение персонажа в 2D- и 3D-проектах на Unity. Урок будет полезен детям и подросткам, которые начинают изучать Unity.

Разрабатывать игры на движке Unity (Юнити) могут дети уже с 10 лет. Создание игр является очень увлекательным, но трудоемким процессом, который требует много внимания и навыков. Чтобы сделать одну игру, нужно учесть много деталей, в том числе научиться делать управление персонажем на Unity. Школа программирования для детей «Пиксель» подготовила подробный урок о том, как научить персонажа двигаться в 2D- и 3D-играх на Unity. Вы также можете посмотреть видеоинструкцию (в конце статьи).

Начнем урок по Unity с разделения игровой сцены на два компонента, где первый — это площадка, по которой персонаж будет перемещаться. Иначе говоря, это Plane. Второй компонент — объект самого героя, Sphere.

Далее переходим к оживлению объектов. Управление персонажем на Юнити должно быть физически правильным. Обеспечить это позволяет компонент RigidBody. В инспекторе нажимаем Add Component, затем Physics и RigidBody.

Как заставить объекты существовать по своим законам? Именно вы являетесь создателем своего мира и вольны сами задавать ему физику. Проработка этого момента почти полностью лежит на скрипте. Писать его будем с помощью такого языка программирования, как Си Шарп (C#).

Создаем пустой скрипт и прописываем переменные, которые будут отвечать за скорость движения, быстроту поворота, передвижение по вертикали и горизонтали. В нашем случае переменные в Си Шарп будут названы MovementSpeed, TurningSpeed, vertical и horizontal соответственно.

В функции Update прописываем поворот персонажа по оси Y и движение по оси Z.

Остается только сохранить и скомпилировать созданную программу.

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

📸 Видео

Unity 18 C# Урок 5 - Векторы и Манипуляции с ними, Vector3Скачать

Unity 18 C# Урок 5 - Векторы и Манипуляции с ними, Vector3

Управление персонажем в Unity 2021Скачать

Управление персонажем в Unity 2021

Вектора в Unity. Простое объяснение за 20 минут! Часть (1/2)Скачать

Вектора в Unity. Простое объяснение за 20 минут! Часть (1/2)

Делаем кривую Безье в Unity !Скачать

Делаем кривую Безье в Unity !

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

Unity C#. Vector3 RotateTowards. Справочник. Мусин Михаил.

Unity vector3Скачать

Unity vector3

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

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

Как ПРАВИЛЬНО сделать передвижение в Unity? Нормали поверхностей + Чистый код на C#Скачать

Как ПРАВИЛЬНО сделать передвижение в Unity? Нормали поверхностей + Чистый код на C#

Unity - Вектор - 16Скачать

Unity - Вектор - 16

Вектора в Unity на практике. Просто объяснение за 20 минут! Часть (2/2)Скачать

Вектора в Unity на практике. Просто объяснение за 20 минут! Часть (2/2)

ВСЕ про Quaternions в Unity - вращение объектовСкачать

ВСЕ про Quaternions в Unity - вращение объектов

ПЕРЕДВИЖЕНИЕ ОТ ПЕРВОГО ЛИЦА В UnityСкачать

ПЕРЕДВИЖЕНИЕ ОТ ПЕРВОГО ЛИЦА В Unity

ПРОСТОЕ УПРАВЛЕНИЕ ПЕРСОНАЖЕМ В UNITY / ХОДЬБА, БЕГ, ПРЫЖОК, ПРИСЕДАНИЕСкачать

ПРОСТОЕ УПРАВЛЕНИЕ ПЕРСОНАЖЕМ В UNITY / ХОДЬБА, БЕГ, ПРЫЖОК, ПРИСЕДАНИЕ

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

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

Unity CHARACTER CONTROLLER и RIGIDBODY простым языком за 7 минут!Скачать

Unity CHARACTER CONTROLLER и RIGIDBODY простым языком за 7 минут!
Поделиться или сохранить к себе: