Dotween unity что это

It is also the evolution of HOTween, my previous Unity tween engine. Compared to it, DOTween is more than 400% faster, more efficient, more type-safe, avoids useless GC allocations and offers new shortcuts and features.

Dotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что это

DOTween is compatible with Unity versions 2020 to 5.6.7.

Works with:
Win, Mac, Linux, Unity WebPlayer, WebGL, iOS, Android,
Windows Phone, UWP (only via IL2CPP starting from v1.2.055), PS Vita (PSM), PlayStation, Xbox, Nintendo Switch + more (didn’t test additional platforms but it should work everywhere except with Flash export)

Features

DOTween Utility Panel

Dotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что этоDotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что это

A utility panel that lets you activate/deactivate Modules and setup default DOTween settings/options, plus check for updates, etc.

DOTween Inspector

Dotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что этоIf you select the [DOTween] GameObject while playing, the corresponding Inspector will show you useful informations, plus buttons to directly open the online documentation and check if you have the latest version.

DOTween Pro

DOTween VS HOTween

After gaining experience by spending the last years on HOTween, I created DOTween from scratch, with the aim of making the tween engine I truly wanted to use, so there’s a lot of differences between the two. DOTween still maintains the flexible object-oriented approach of HOTween (actually, it’s much more flexible), but also…

DOTween is free and open-source like HOTween, but there is a special Pro version which contains extra stuff and that requires a small one-time fee.

I hope you will understand and will support this decision.
Other than that, donations are always welcome 🙂

Comparison with other engines

All these tests were done from a build, since some of these tween engines (DOTween, HOTween and GoKit) do additional stuff while in the Editor to show editor-only debug informations, and thus testing them outside the editor, where it counts, seemed more fair.

To keep the test accurate download the latest versions of all engines and replace the old ones (the ones used here are from July/August 2014).

Generic floats

You’ll find more tests for the tween of generic floats because GoKit and iTween couldn’t tween as many as the other engines, but I still wanted to show high-level results.

64,000 generic floats in a loop

DOTweenHOTweenLeanTweenGoKitiTween
Average FPS124 FPS25 FPS102 FPSfreezesfreezes
Startup time76 MS332 MS34 MSfreezesfreezes

16,000 generic floats in a loop

DOTweenHOTweenLeanTweenGoKitiTween
Average FPS412 FPS115 FPS389 FPS387 FPSfreezes
Startup time14 MS74 MS7 MS47,432 MSfreezes

2,000 generic floats in a loop

DOTweenHOTweenLeanTweenGoKitiTween
Average FPS1091 FPS888 FPS1050 FPS998 FPS3 FPS
Startup time2 MS11 MS1 MS6,258 MS240 MS

Transforms

4,000 transforms looping around

Support DOTween

A lot of work went into DOTween and a lot more is to come. If you use it, like it, and want to support it, press this button to read more

Источник

Before anything else

Step 1

Dotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что это

Download DOTween and unzip it anywhere in your Unity Assets folder (just not inside the Editor, Plugins or Resources directories).

Setup

After importing a new DOTween update, you have to setup DOTween in order to import/re-import additional libraries based on your Unity version and activate/deactivate Modules.

To setup DOTween, open DOTween Utility Panel from the «Tools/Demigiant» menu, then select «Setup DOTween. » from the panel that appears.

Step 2

Import DOTween’s namespace in each class/script you want to use it:

(DG stands for Demigiant, Tweening for, uh, tweening)

Step 3 (optional)

Initialize DOTween to setup some global options:

If you don’t do that (or do that after creating your first tween) DOTween will be auto-initialized with the default settings, but you can still change them whenever you want.

An introduction

DOTween can be used in a totally generic way, like this:

Dotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что это

Dotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что это

Whichever way you choose, when you create a tween you are returned a Tweener or a Sequence (here’s an explanation of the difference) so you can store a reference to it if you want. You can also store both as a Tween without caring about the distinction.

You can control tweens in various ways: you can use static DOTween methods (which have additional options for filtering)…

…direct tween references…

FROM Tweens

You can make almost any tween play FROM the given value to its current one (instead than TO the given value from the current one, as by default) simply by chaining a From setting to it:

Global and specific settings

You can set global settings that will be applied to all newly created tweens, or obsessively set specific settings for each single tween you create.

Global settings

Global settings allow you to set the default autoPlay and autoKill behaviour, ease type, global timeScale, and stuff like that.

Specific settings

Specific settings are assigned via chaining and they all start with a «Set» (except for callbacks, that start with an «On«) so IntelliSense will help you find them.

Here, take some examples of chaining in action:

You can even copy all settings from one tween to another, using SetAs():

(both tweens will loop 4 times with an OutQuint ease and when finished they’ll call the same OnComplete method, even if they’re actually tweening completely different objects and types)

A tween’s life

When you create a tween it will play automatically (unless you change the global defaultAutoPlay behaviour) until it completes all its loops.

When a tween is complete it is automatically killed (unless you change the global defaultAutoKill behaviour), which means you won’t be able to use it anymore.

If you want to reuse the same tween, just set its autoKill behaviour to FALSE (either by changing the global autoKill settings for all tweens, or by chaining SetAutoKill(false) to your tween).

If your tween’s target becomes NULL while a tween is playing errors might happen. You’ll have to either be careful or activate the safe mode

Cache and max tweens

If you activate recycling DOTween caches all the tweens you create, so it can reuse them instead of creating new ones.
Also, to avoid using more resources than necessary, it sets itself to max 200 Tweeners and 50 Sequences running at the same time. If you need more, DOTween will increase its size automatically, but you can also set it directly to avoid hiccups when auto-resizing happens:

If at any moment you want to clear DOTween’s cache and completely reset it, you can call DOTween.Clear(), which will kill all tweens and purge all cache.

Recycling a tween

You don’t need to recycle tweens manually. Instead you can choose to automatically recycle them all or just specific ones.

Support DOTween

A lot of work went into DOTween and a lot more is to come. If you use it, like it, and want to support it, press this button to read more

Источник

Интерполяция — мать анимации — Твинеры в Unity

Но есть и у этого инструмента слабое место. Все анимации жестко ограничены, они представляют собой заранее описанный сценарий, который просто воспроизводится на иерархии объектов. Впрочем, это не совсем так. Как уже было отмечено выше, аниматор это чрезвычайно сложный инструмент, во всех его UI можно найти множество кнопочек и настроек, каждая из которых, как ни удивительно, выполняет какую-то функцию. К примеру, Avatar Mask позволяет сделать так, что некоторый слой анимации будет управлять отдельными частями тела, и персонаж будет махать рукой сидя на лошади, хотя отдельной такой анимации на Mixamo не нашлось =( Аниматор просто отыгрывает 2 анимации параллельно на тех костях, которые были заданы масками.

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

Допустим, нам нужна анимация, которая будет активно взаимодействовать с окружением. Например, при контакте с персонажем монетка должна подпрыгнуть, сверкнуть, и улететь в карман нашего героя. То есть, сценарий нашей анимации зависит от контекста своего выполнения. Или нам просто не нужен аниматор на конкретном объекте. Например, анимируя UI нужно очень постараться, чтобы аниматор не заставлял Canvas перерисовываться на каждом кадре. А также, аниматор ничем не сможет помочь, если мы работаем с несовместимыми интерфейсами. Например, если мы захотим сделать анимацию накопления при подсчете очков или двигать вершины меша(Может быть, даже взаимодействуя с окружением! Например, плавно помять корпус авто в точке удара). Здесь нам поможет только описание логики анимации с помощью кода. Наконец-то мы подобрались к основной теме данной статьи.

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

Dotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что это

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

Dotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что этоТвинер не справа и не слева. Он посередине

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

Dotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что этовместо уверенного роста, функция изменила свое значение на интервале, чтобы соответствовать касательной, которая проходит через пару промежуточных точек

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

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

Но на мой взгляд, единственный необходимый и самый полезный способ работы с DOTween выглядит вот так:

Это максимально абстрактное описание твинера, позволяющее наглядно и эффективно описать любую задачу и, как самые внимательные уже заметили, может существенно сократить сигнатуру до DOTween.To(duration, MyMethod) вызываемой функции и улучшить читаемость кода. Для большей понятности посмотрим, что может находиться MyMethod:

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

Dotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что это

Как уже сказал, в Dotween есть возможность объявлять цепочки анимаций. После завершения предыдущего твина будет выполняться следующий или разовый Callback, позволяющий сообщить о завершении анимации и отобразить кнопку «Далее»

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

А еще где-то должна быть реализация. Я предпочитаю использовать лямбды в описании твинера.

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

К слову, о захвате контекста. Это больное место всех известных мне твинеров, включая и DOTween. Смена сцены в процессе анимации или уничтожение анимируемых объектов ломает его работу. Issue был открыт в марте 2016, и судя по комментариям, проблема есть по сей день. Вероятно, предполагается, что это настолько очевидно, что здесь даже не нужна защита от дурака. В конце концов, всегда можно подписаться на смену сцены и прерывать их исполнение. Или проверять существование объекта в процессе выполнения, потеряв львиную долю производительности и рискуя создать утечку памяти, захватив в зацикленном твинере ссылку на объект, но не затрагивая при этом выгруженный компонент, откуда мы эту ссылку получили. В этой проблеме кроется одна из главных причин, по которым я использую собственный твинер, и единственная, по которой я взялся его писать.

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

Стандартная длительность анимации в 0.3 секунды была подсмотрена в гайдлайнах Material Design и очень хорошо зарекомендовала себя на практике. Это та длительность, при которой анимация заметна, ощущается ее плавность и эффект от Easing-функции, но не заставляет пользователя ждать. Обычно я указываю бó‎льшую длительность для каких-то особых анимаций, которые сопровождают значимое действие, но для 90% анимаций это аргумент, который удобнее будет скрыть.

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

Эта статья задумывалась ни в коем случае не как сравнение различных реализаций или реклама своей(Которая, хоть и служит мне верой и правдой не первый год, никогда не претендовала на богатый функционал или хорошую производительность. Это наивная реализация очевидного алгоритма). В первую очередь, я хотел поднять проблему излишнего перехода от общего к частному в твинерах. Инструменты, которые должны обеспечивать эффективный и плавный переход в пределах интервала, всего лишь прогонять третий аргумент в функции Lerp, соревнуются в том, как много сахара они смогут насыпать в ваши проекты. А изначально необходимую функциональность приходится достигать путем двойной конвертации в виде аргументов функции DOTween.To. Спрятав Lerp в черный ящик они, пусть и упростили твинеры для пользования детьми, превратили их в бесполезные игрушки. Впрочем, как мы убедились выше, если очень постараться, DOTween можно использовать по назначению. И мыши плакали, кололись, но продолжали есть кактус.

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

Источник

Русские Блоги

[Плагин Unity] DOTween основы

[Плагин Unity] DOTween основы

Просмотр некоторых эффектов dotwteen easy

Официальная ссылка на документ: http://dotween.demigiant.com/documentation.PHP#globalSettings

Адрес загрузки обычной версии: http://dotween.demigiant.com/download.php

Адрес для загрузки Pro версии: http://pan.baidu.com/s/1dEzTQkL

(Pro версия предоставляет два компонента, DOTween Animation и DOTween Path, поддерживает визуальное редактирование)

Тип мобильного телефона: http://robertpenner.com/easing/easing_demo.html

DOTween действительно намного лучше, чем iTween:

1. Аспект письма более удобен для пользователя

2. Эффективность намного выше, одна из них потому, что iTween использует встроенный в Unity SendMessage

DOTween обычно выглядит так:

Ну, это официально началось!

Tweener: анимация анимации

Sequence: эквивалентно связанному списку Tweener, вы можете выполнить последовательность Tweener, выполнив Sequence

Вложенная анимация движения. Последовательность анимации называется вложенной анимацией движения

Основной метод (наиболее часто используемый):

3. Метод, который начинается с On: метод обратного вызова для анимации движения. Например: myTween.OnStart (myStartFunction)

DОт инициализации до глобальных настроек:

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

Конечно, вы также можете использовать метод DOTween.Init для настройки, но перед первым созданием Tween. Все созданные Tween будут затронуты методом DOTween.Init.

Но после этого вы также можете изменить глобальные настройки с помощью некоторых статических методов или переменных класса DOTween:

static DOTween.Init(bool recycleAllByDefault = false, bool useSafeMode = true, LogBehaviour logBehaviour = LogBehaviour.ErrorsOnly)

recycleAllByDefault: если true, он будет переработан после завершения Tween и помещен в пул; в противном случае он будет уничтожен

useSafeMode: эффективность будет немного ниже, но безопаснее

logBehaviour: по умолчанию печатаются только сообщения об ошибках

Источник

Русские Блоги

Плагин Unity (1) DoTween

1. Резюме

Во-вторых, использовать

(1) Анимировать вектор

(2) Управление движением куба и панели интерфейса

Смонтируйте скрипт обращения к кубу и назначьте изменение myValue для локальной позиции куба в обновлении.

Элемент управления панели интерфейса можно просто смонтировать сценарий на панели интерфейса

(3) Воспроизведение анимации

SetAutoKill: установить автоматическое уничтожение анимации
DoPlayForward: анимация воспроизводится вперед
DoPlayBackwards: анимация воспроизводится в обратном направлении
DoPause: пауза

(4) Настройка недвижимости

Form:
Из любого метода вызова анимации в DoTween можно добавить From (), что означает перемещение из целевой позиции в текущую позицию
From(true)
указывает, что целевая координата равна текущей координате плюс текущая целевая координата, если текущая координата объекта равна 2, то эта строка кода указывает, что целевая позиция (5 + 2) через 1 секунду перемещается к текущей место

(5) Текстовая анимация диалогового окна

DoText
Анимация текстового диалога, этот метод отображает эффект пишущей машинки

(6) Эффект вибрации экрана

DOShakePosition(1);
1 означает время, примените эту строку кода к камере, камера будет дрожать через 1 секунду
DOShakePosition(new Vector3(1,1,0),2);
Случайный джиттер в направлениях x и y в течение 2 секунд

(7) Цветовой градиент и прозрачность

DOColor (): градиент цвета
DOColor (Color.Red, 1f); // меняется на красный в течение 1/1 секунды
DOFade (): прозрачный
DOFade (1,5f); // 5 секунд от полностью прозрачного до непрозрачного

(8) Визуальная работа плагина DoTween
Dotween unity что это. Смотреть фото Dotween unity что это. Смотреть картинку Dotween unity что это. Картинка про Dotween unity что это. Фото Dotween unity что это
LocalMove: указывает место, которое нужно изменить, есть несколько вариантов на выбор
AutoPlay: играть автоматически
AutoKill: нужно ли автоматически уничтожать
Продолжительность: время
Deley: время задержки воспроизведения

(9) Визуальное редактирование DoTweenPath

Вы можете использовать пути для создания анимации

Источник

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

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