Task Animation Library for Unity
Rx Version! -> kyubuns/AnimeRx
Read this document in other languages: 日本語
Move from (-5f, 0f, 0f)
to (5f, 0f, 0f)
over 2 seconds.
await Easing.Create<Linear>(new Vector3(-5f, 0f, 0f), new Vector3(5f, 0f, 0f), 2f).ToLocalPosition(cube);
Move from the current location to a specified location.
await Easing.Create<Linear>(new Vector3(-5f, 3f, 0f), 2f).ToLocalPosition(cube);
Use InCubic of Easing to move to a specified position.
await Easing.Create<InCubic>(new Vector3(-5f, 3f, 0f), 2f).ToLocalPosition(cube);
Move at 1 per second for 2 seconds.
await Moving.Linear(1f, 2f).ToLocalPositionX(cube);
const float xRange = 5f;
const float yRangeMin = 5f;
const float yRangeMax = 10f;
await Moving.Gravity(
new Vector3(Random.Range(-xRange, xRange), Random.Range(yRangeMin, yRangeMax)),
Vector3.down * 9.8f,
5f
).ToLocalPosition(shape)
Move by calculating moving time from distance.
await Easing.Create<OutCubic>(new Vector3(5f, 0f, 0f), x => x / 2f)
.Concat(Easing.Create<OutCubic>(new Vector3(5f, 2f, 0f), x => x / 2f))
.Concat(Easing.Create<OutCubic>(new Vector3(-5f, 0f, 0f), x => x / 2f))
.ToLocalPosition(cubes);
TranslateTo.Action
enables you to use the animated values freely.
Easing.Create<Linear>(0, 100, 2f).ToAction<float>(x => Debug.Log(x))
You can create your own scheduler, so you can stop time for specific objects.
The default is to use Time.time
, and you can also use UnscaledTimeScheduler
, which uses Time.unscaledTime
.
Easing.Create<Linear>(new Vector3(-5f, 0f, 0f), new Vector3(5f, 0f, 0f), 2f)
.ToLocalPosition(shape, default, new UnscaledTimeScheduler());
var cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.Token.Register(() => Debug.Log("Cancel"));
cancellationTokenSource.CancelAfter(500);
await Easing.Create<OutCubic>(new Vector3(5f, 0f, 0f), 2f).ToLocalPosition(cubes[0], cancellationTokenSource.Token);
Move to the right at constant speed for 2 seconds, and set scale to 0 in the last 0.2 seconds.
await UniTask.WhenAll(
Moving.Linear(3f, 2f).ToLocalPositionX(cube),
Animator.Delay(1.8f, Easing.Create<Linear>(Vector3.zero, 0.2f)).ToLocalScale(cube),
);
Convert a float
transition to a circular motion.
await Easing.Create<OutCubic>(0.0f, Mathf.PI * 2.0f, 2f)
.Convert(x => new Vector3(Mathf.Sin(x), Mathf.Cos(x), 0.0f) * 3.0f)
.ToLocalPosition(go);
It moves from 5f to 0f in 2 seconds, stops for 1 second, and moves to -5f in 2 seconds.
await Easing.Create<OutCubic>(5f, 0f, 2f)
.Delay(1f)
.Concat(Easing.Create<OutCubic>(0f, -5f, 2f))
.Convert(x => new Vector3(x, 0f, 0f))
.ToLocalPosition(cubes[0]);
Supporting IProgress
await Easing.Create<Linear>(2f).ToProgress(Progress.Create<float>(x => Debug.Log(x)));
- Import UniTask
- Import AnimeTask
- Package Manager
https://github.com/kyubuns/AnimeTask.git?path=Assets/AnimeTask
- UnityPackage
- Package Manager
You can pass two arguments to Play
and PlayTo
.
The first is the Animator
and the second is the Translator
, which have distinct roles.
Takes the elapsed time and returns the current value.
Reflect the value.
- Requires Unity2019.4 or later
MIT License (see LICENSE)
Are you enjoying save time?
Buy me a coffee if you love my code!
https://www.buymeacoffee.com/kyubuns
I'd be happy to receive reports like "I used it for this game!"
Please contact me by email, twitter or any other means.
(This library is MIT licensed, so reporting is NOT mandatory.)
MessageForm