что такое velocity в unity

Что такое velocity в unity

что такое velocity в unity. unitycode. что такое velocity в unity фото. что такое velocity в unity-unitycode. картинка что такое velocity в unity. картинка unitycode.

среда, 4 апреля 2012 г.

Физические свойства игрового объекта

Метод rigidbody объекта GameObject хранит в себе его физические свойства. Прежде, чем использовать метод rigidbody, его необходимо добавить к игровому объекту.

Получаем/задаем вектор скорости объекта:

Сила противодействия объекта. Может использоваться для замедления скорости, в среде с отсутствующей силой трения. Наиболее часто используется для замедления падающих объектов, например при создании парашюта. Принимает в качестве параметра целое число:

Задание массы объекту. Рекомендуется использовать массу в пределах от 0.1 до 10. Использование слишком больших значений может привести к непредсказуемым результатам при расчете физики:

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

Влияние физики на игровой объект. Позволяет отключить частично, либо полностью влияние физических законов на объект:

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

Указание координат точки центра массы объекта. Применяет координаты в виде уже знакомого нам объекта Vector3.

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

Режим определения столкновений между объектами. Можно указать несколько разных режимов:
CollisionDetectionMode.ContinuousDynamic для быстро движущихся объектов;
CollisionDetectionMode.Continuous для столкновений с быстро движущимися объектами;
CollisionDetectionMode.Discrete (по умолчанию) для обычных столкновений;
В случае отсутствия проблем с определением столкновений рекомендуется использовать свойство по умолчанию.

Задать плотность объекта:

Применить импульс к объекту с указанным вектором. В результате применения импульса объект придет в движение пропорционально силе импульса.

Применить импульс к объекту с вектором в его (объекта) системы координат:

Добавить объекту крутящий момент. Применение данного метода заставит объект вращаться вокруг своего центра масс GameObject.rigidbody.centerOfMass.

Тоже самое, что и предыдущий пример, но относительно координат объекта:

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

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

Заставить объект «уснуть», и запретить дальнейший расчет физических показателей для него:

Проверить «заснул» ли объект:

«Разбудить» объект для возможности дальнейшего применения влияния физики на него:

Источник

NavMeshAgent.velocity

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Description

Access the current velocity of the NavMeshAgent component, or set a velocity to control the agent manually.

Reading the variable will return the current velocity of the agent based on the crowd simulation.

Setting the variable will override the simulation (including: moving towards destination, collision avoidance, and acceleration control) and command the NavMesh Agent to move using the specific velocity directly. When the agent is controlled using a velocity, its movement is still constrained on the NavMesh.

Setting the velocity directly, can be used for implementing player characters, which are moving on NavMesh and affecting the rest of the simulated crowd. In addition, setting priority to high (a small value is higher priority), will make other simulated agents to avoid the player controlled agent even more eagerly.

It is recommended to set the velocity each frame when controlling the agent manually, and if releasing the control to the simulation, set the velocity to zero. If agent’s velocity is set to some value and then stopped updating it, the simulation will pick up from there and the agent will slowly decelerate (assuming no destination is set).

Note that reading the velocity will always return value from the simulation. If you set the value, the effect will show up in the next update. Since the returned velocity comes from the simulation (including avoidance and collision handling), it can be different than the one you set.

The velocity is specified in distance units per second (same as physics), and represented in global coordinate system.

Источник

Rigidbody.velocity

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Submission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Description

The velocity vector of the rigidbody. It represents the rate of change of Rigidbody position.

Note: The velocity is a world-space property.

Note: A velocity in Unity is units per second. The units are often thought of as metres but could be millimetres or light years. Unity velocity also has the speed in X, Y, and Z defining the direction.

Did you find this page useful? Please give it a rating:

Thanks for rating this page!

Is something described here not working as you expect it to? It might be a Known Issue. Please check with the Issue Tracker at

Thanks for letting us know! This page has been marked for review based on your feedback.

If you have time, you can provide more information to help us fix the problem faster.

You’ve told us this page needs code samples. If you’d like to help us further, you could provide a code sample, or tell us about what kind of code sample you’d like to see:

You’ve told us there are code samples on this page which don’t work. If you know how to fix it, or have something better we could use instead, please let us know:

You’ve told us there is information missing from this page. Please tell us more about what’s missing:

You’ve told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:

You’ve told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:

You’ve told us there is a spelling or grammar error on this page. Please tell us what’s wrong:

You’ve told us this page has a problem. Please tell us more about what’s wrong:

Thanks for helping to make the Unity documentation better!

Is something described here not working as you expect it to? It might be a Known Issue. Please check with the Issue Tracker at issuetracker.unity3d.com.

Copyright © 2020 Unity Technologies. Publication Date: 2021-02-24.

Источник

Что такое velocity в unity

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

Во многих статьях это реализуют через прямое воздействие на Velocity.
Пример:
rb.velocity = new Vector2 (Input.GetAxis(«Horizontal»), rb.velocity);

Но, что если при ударе снаряда мой персонаж должен отлетать по вектору (-10,10);
AddForce(new Vector2(-10,10), ForceMode2D.Impulse);

Если я ничего не нажимаю, то компонент Х вектора Velocity всегда сбрасывается в 0, что не позволит совершить такой маневр.
Прямое взаимодействие с велосити у меня постоянно приводит к головной боли если есть другие силы, которые воздействуют на игрока.

Я пытался это сделать через AddForce, но не могу полностью избавиться от «слайдинга» и ускорения.
Как решается подобная задача?

Re: Взаимодействие Rigidbody.Velocity

Re: Взаимодействие Rigidbody.Velocity

Ну как почему X сбрасывается.
Эта строка ее сбрасывает:
rb.velocity = new Vector2(Input.GetAxis(«horizontal»), rb.velocity.y);

Если я не ввожу Horizontal он нуль. Он и сбрасывает. В этом вся и проблема.

в документации написано что пока я двигаю через movePosition гравитация на меня не действует, это не подойдет.
Неужели нет возможности перемещаться без ускорения и замедления, по крайней мере видимого, но не через воздействие на velocity?
Поиграв с настройками компонента rb мне удалось добиться «что-то рядом». Но игрок реагирует на движение лишь через несколько мгновений, а не сразу.

Re: Взаимодействие Rigidbody.Velocity

Просто не устанавливайте скорость по икс в ноль, если клавишу ходьбы не нажата.

_rb2D. velocity = currentVel ;

Возможно лучше сделать не прямой установкой скорости, а плавной, то-есть добавлять к скорости +=. Или таки AddForce, но контролировать максимальную скорость (if velocity > 10 то velocity = 10), чтобы персонаж не двигался очень быстро.

Re: Взаимодействие Rigidbody.Velocity

samana писал(а): Просто не устанавливайте скорость по икс в ноль, если клавишу ходьбы не нажата.

_rb2D. velocity = currentVel ;

Возможно лучше сделать не прямой установкой скорости, а плавной, то-есть добавлять к скорости +=. Или таки AddForce, но контролировать максимальную скорость (if velocity > 10 то velocity = 10), чтобы персонаж не двигался очень быстро.

Re: Взаимодействие Rigidbody.Velocity

Re: Взаимодействие Rigidbody.Velocity

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

Если кто реализовывал данное, вроде самое обычное поведение, отпишитесь, пожалуйста.
В игре идет управление персонажем, моментальный старт и моментальная остановка.
В процессе ходьбы или idle в него попадает шар и на игрока воздействует физ сила отбрасывания. AddForce()

Проблема в том что я не могу остановить персонажа в тот же момент без обнуления velocity, но обнуляя велосити
AddForce не сработает, а не обнуляя велосити моментальной остановки не происходит.

— Без прямого воздействия с велосити не обошелся, но нашел путь когда его можно безопасно записывать.
Я это делаю не отслеживая нажатия кнопки, а проигрывающуюся анимацию.
К примеру велосити может быть перезаписано только в Runstate. Теперь если нас ударят и сработает DamageState то мы не сможем ходить, так как уже не управляем велосити и нас отбросит как нужно.

Источник

Система управления в 2D платформерах

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

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

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

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

Система команд

что такое velocity в unity. 1 sozdaem novyj kanvas na scene. что такое velocity в unity фото. что такое velocity в unity-1 sozdaem novyj kanvas na scene. картинка что такое velocity в unity. картинка 1 sozdaem novyj kanvas na scene.

Создаем скрипт с перечислениями ActionType в котором будут находится команды.

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

Дальше создадим персонажа на сцене.

что такое velocity в unity. 2 create char. что такое velocity в unity фото. что такое velocity в unity-2 create char. картинка что такое velocity в unity. картинка 2 create char.

Дальше кидаем скрипт Character на персонажа на сцене и возвращаемся к канвасу, где продолжим настраивать наши кнопки.

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

что такое velocity в unity. 3 event trig. что такое velocity в unity фото. что такое velocity в unity-3 event trig. картинка что такое velocity в unity. картинка 3 event trig.

Поэтому нажимаем кнопку AddNewEventType в компоненте EventTrigger и ищем эти события, после чего добавляем их.

что такое velocity в unity. 4 event trig 2. что такое velocity в unity фото. что такое velocity в unity-4 event trig 2. картинка что такое velocity в unity. картинка 4 event trig 2.

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

что такое velocity в unity. 5 event trig 3. что такое velocity в unity фото. что такое velocity в unity-5 event trig 3. картинка что такое velocity в unity. картинка 5 event trig 3.

Добавляем его в список действий.

что такое velocity в unity. 6 event trig 4. что такое velocity в unity фото. что такое velocity в unity-6 event trig 4. картинка что такое velocity в unity. картинка 6 event trig 4.

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

что такое velocity в unity. 7 console action. что такое velocity в unity фото. что такое velocity в unity-7 console action. картинка что такое velocity в unity. картинка 7 console action.

Обработка команд

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

Возвращаемся в скрипт Character, где для начала добавим несколько переменных: переменную направления directionRight, и переключатели onMoving и onMakeJump для движения и совершения прыжка.

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

Перед тем как выполнить эту команду, необходимо дополнительно проверить, стоит ли на “ земле ” наш персонаж. Для этого добавим простой коллайдер BoxCollider2D персонажу и настроим его.

что такое velocity в unity. 8 char collider. что такое velocity в unity фото. что такое velocity в unity-8 char collider. картинка что такое velocity в unity. картинка 8 char collider.

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

Для этого используем позицию point и размер size коллайдера персонажа.

Далее методом Physics2D.OverlapBox проверим наличие поверхности под “ ногами ”.

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

Физический движок Unity – это самостоятельная система обработки физических объектов и чем больше этих объектов будет на сцене? тем больше ресурсов уйдет на их обработку, так что для лучшей работы игры следует максимально минимизировать их кол-во.

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

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

что такое velocity в unity. 9 fireball. что такое velocity в unity фото. что такое velocity в unity-9 fireball. картинка что такое velocity в unity. картинка 9 fireball.

Методы обработки

Для обработки движения двух разных типов объектов ( Transform и Rigidbody ) существует два разных метода Update и FixedUpdate – каждый из них используется для своих целей.

Общее у этих методов то, что они оба вызываются через определенное время, Update – каждый кадр, а FixedUpdate – каждый промежуток времени.

В первом случае метод Update вызывается столько раз, сколько позволяет частота кадров в игре, то есть если у вас частота к примеру 60 кадров в 1 секунду, значит, что и метод Update сработает 60 раз за 1 секунду.

Многие начинающие разработчики часто работают с Rigidbody в разных методах: ускоряют, замедляют их, придают им импульсы, бросают и так далее. Но с физическими телами рекомендуется работать именно в методе FixedUpdat. Даже если вы 10 раз измените позицию тела Rigidbody в том же методе Update или в любом другом методе, то все равно эти изменения вступят в силу только в момент вызова метода FixedUpdate, какая частота кадров у вас бы ни была.

В отличие от Transform’а у физического тела Rigidbody есть несколько способов перемещения.

Движение с ускорением

Теперь попробуем применить выбранный тип движения для персонажа, для этого вернемся в скрипт персонажа Character, где создадим новый метод FixedUpdate и пару переменных для перемещения: moveSpeed для скорости движения и jumpForce для силы прыжка.

Сначала определим, в какую сторону персонажу нужно совершать ускорение по оси X. Для этого с помощью переменной directionRight проверим направление персонажа, если ее значение true, значит ускорять объект нужно вправо с положительным значением, если же значение false, то будем ускорять объект влево с отрицательным значением.

Здесь ускорение по оси Y оставляем неизменным – персонаж сам будет обрабатывает вертикальное ускорение.

После проделанных действий наш персонаж сможет двигаться по горизонтали учитывая силу притяжения.

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

что такое velocity в unity. 10. что такое velocity в unity фото. что такое velocity в unity-10. картинка что такое velocity в unity. картинка 10.

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

что такое velocity в unity. 11 zero friction. что такое velocity в unity фото. что такое velocity в unity-11 zero friction. картинка что такое velocity в unity. картинка 11 zero friction.

что такое velocity в unity. 13 physic material screen. что такое velocity в unity фото. что такое velocity в unity-13 physic material screen. картинка что такое velocity в unity. картинка 13 physic material screen.

Перекинем физический материал в поле Material коллайдера поверхности и снова тестируем.

что такое velocity в unity. 14 more friztion. что такое velocity в unity фото. что такое velocity в unity-14 more friztion. картинка что такое velocity в unity. картинка 14 more friztion.

Изменяя коэффициент трения Friction физического материала можно добиться нужно результата движения по поверхности.

Импульс

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

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

что такое velocity в unity. 15 gravity. что такое velocity в unity фото. что такое velocity в unity-15 gravity. картинка что такое velocity в unity. картинка 15 gravity.

что такое velocity в unity. 16 physics 2d settings. что такое velocity в unity фото. что такое velocity в unity-16 physics 2d settings. картинка что такое velocity в unity. картинка 16 physics 2d settings.

Снова проверим результат.

что такое velocity в unity. 17. что такое velocity в unity фото. что такое velocity в unity-17. картинка что такое velocity в unity. картинка 17.

Заключение

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *