Как задать вектор unity

Математика в Gamedev по-простому. Векторы и интегралы

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

Как задать вектор unity

Векторная математика.

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

Векторная арифметика и полезные функции

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

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

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

Так как мы хотим, чтобы вектор был определённой длинны и точно соответствовал точкам, которые мы задаём, то длинна линии рассчитывается по формуле:

В данной формуле (_VectorEnd — _VectorStart).normalized – это направление вектора. Это можно понять из анимации с разницей векторов, приняв что _VectorEnd и _VectorStart – это вектора с началом в (0,0,0).

Дальше разберём две оставшиеся базовые операции:

Нахождение нормали (перпендикуляра) и середины вектора – это очень часто встречающиеся задачи при разработке игр. Разберём их на примере размещения подписи над вектором.

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

Вот мы и получили нормаль к отрезку.

normal = normal.y > 0? normal: -normal; — эта операция отвечает за то, чтобы текст всегда показывался над вектором.

Дальше остаётся поместить его в середину вектора и поднять по нормали на расстояние, которое будет смотреться красиво.

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

Но это было про 2D, а что же с 3D?

В 3D плюс-минус всё тоже самое. Отличается только формула нормали, так как нормаль уже берётся не к отрезку, а к плоскости.

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

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

Вообще у интегралов очень много применений, таких как: физические симуляции, VFX, аналитика и многое другое. Я не готов сейчас детально описывать все. Хочется описать простой и визуально понятный. Поговорим про физику.

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

Что такое интеграл?

По сути это площадь под кривой. Но что это означает в контексте физики? Допустим у вас есть распределение скорости по времени. В данном случае площадь под кривой – это путь который пройдёт объект, а это как раз то, что нам и нужно.

Как задать вектор unity

Если перейти от теории к практике, то в Unity есть замечательный инструмент под названием AnimationCurve. С помощью него можно задать распределение скорости с течением времени. Создадим вот такой класс.

Метод GetApproxSquareAnimCurve – это и есть наше интегрирование. Мы делаем его простейшим численным методом, просто идём по значениям фукнции и суммируем их определённое число раз. Я выставил 1000 для верности, в целом можно подобрать оптимальнее.

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

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

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

unity3d Vector3 Creating a Vector3

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

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

Example

A Vector3 structure can be created in several ways. Vector3 is a struct, and as such, will typically need to be instantiated before use.

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

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

Constructors

There are three built in constructors for instantiating a Vector3 .

ConstructorResult
new Vector3()Creates a Vector3 structure with co-ordinates of (0, 0, 0).
new Vector3(float x, float y)Creates a Vector3 structure with the given x and y co-ordinates. z will be set to 0.
new Vector3(float x, float y, float z)Creates a Vector3 structure with the given x , y and z co-ordinates.

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

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

Converting from a Vector2 or Vector4

While rare, you may run into situations where you would need to treat the co-ordinates of a Vector2 or Vector4 structure as a Vector3 . In such cases, you can simply pass the Vector2 or Vector4 directly into the Vector3 , without previously instantiating it. As should be assumed, a Vector2 struct will only pass x and y values, while a Vector4 class will omit its w .

We can see direct conversion in the below script.

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

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

DenTNT.trmw.ru

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

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

Записная книжка

Видео:Unity vector3Скачать

Unity vector3

Unity: Операции с векторами

В одном из проектов мне встретился такой код:

здесь transform.forward представлен как Vector3,
moveSpeed и Time.deltaTime — float
Т.е. тут идет умножение ненулевого ВЕКТОРА на число. Поскольку я учился на физмате, то сейчас у меня чуть не съехала крыша, когда я пытался вспомнить все то, что я знаю о векторах, ведь если вернутся к математике, формула выше решается так:

Произведение ненулевого вектора на число — это вектор, коллинеарный данному (сонаправленный данному, если число положительное, имеющий противоположное направление, если число отрицательное), а его модуль равен модулю данного вектора, умноженному на модуль числа. OnlineMSchool

К счастью, до того, как окончательно треснул мой череп, я успел понять, что Vector3 в Unity — это не совсем ВЕКТОР (отрезок, имеющий направление), здесь это прежде всего КООРДИНАТЫ x, y для Vector2 и x. y, z — для Vector3. Хотя наверное на вектор это похоже, т.к. начало его лежит в точке 0.
В документации Unity есть несколько статей про операции с векторами:
1. Понимание векторной арифметики
2. Направление и расстояние от одного объекта до другого
3. Вычисление нормали/перпендикуляра
4. Величина одного вектора, лежащая в направлении другого вектора

🎥 Видео

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

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

Векторная математика в UnityСкачать

Векторная математика в Unity

Vector3.MoveTowards 30 second Unity tutorialСкачать

Vector3.MoveTowards 30 second Unity tutorial

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

Unity - Вектор - 16

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

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

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

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

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

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

Структуры Vector2 и Vector3 в Unity 🗜️ #unity #gamedev #unity3d #coding #csharp #старикСкачать

Структуры Vector2 и Vector3 в Unity 🗜️ #unity #gamedev #unity3d #coding #csharp #старик

Демонстрация работы векторной математики в UnityСкачать

Демонстрация работы векторной математики в Unity

Физика в Unity - 9. RaycastСкачать

Физика в Unity - 9. Raycast

Unity/C# Вектора: скалярное произведение и векторное произведение векторовСкачать

Unity/C# Вектора: скалярное произведение и векторное произведение векторов

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

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

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

ВСЕ про Quaternions в Unity - вращение объектов
Поделиться или сохранить к себе: