kyubuns / Animetask
Projects that are alternatives of or similar to Animetask
AnimeTask
Task Animation Library for Unity
Rx Version! -> kyubuns/AnimeRx
Read this document in other languages: 日本語
Sample
Basic
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);

PlayTo
Move from the current location to a specified location.
await Easing.Create<Linear>(new Vector3(-5f, 3f, 0f), 2f).ToLocalPosition(cube);

Easing
Use InCubic of Easing to move to a specified position.
await Easing.Create<InCubic>(new Vector3(-5f, 3f, 0f), 2f).ToLocalPosition(cube);

Linear
Move at 1 per second for 2 seconds.
await Moving.Linear(1f, 2f).ToLocalPositionX(cube);
Gravity
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)

CalcDuration
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
TranslateTo.Action
enables you to use the animated values freely.
Easing.Create<Linear>(0, 100, 2f).ToAction<float>(x => Debug.Log(x))
UnscaledTime
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());
Cancel
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);
Delay
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
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);

Concat
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))
.ToLocalPositionX(cubes[0]);
IProgress
Supporting IProgress
await Easing.Create<Linear>(2f).ToProgress(Progress.Create<float>(x => Debug.Log(x)));
AnimationCanceller
var canceller = go.GetAnimationCanceller().Cancel();
Easing.Create<Linear>(1.0f, 0.5f).ToLocalPositionX(go, canceller.Token);
// in other class/scope
var canceller = go.GetAnimationCanceller().Cancel();
Easing.Create<Linear>(0.0f, 0.5f).ToLocalPositionX(go, canceller.Token);
UniRx.Extensions
var score = new ReactiveProperty<int>(0);
score
.SubscribeTask(async (x, cancellationToken) =>
{
scoreCounter.text = $"{x}";
await Easing.Create<OutBounce>(2f, 1f, 0.5f).ToLocalScale(scoreCounter, cancellationToken);
});
Instructions
- Import UniTask
- Import AnimeTask
- Package Manager
https://github.com/kyubuns/AnimeTask.git?path=Assets/AnimeTask
- UnityPackage
- Package Manager
Way of thinking
You can pass two arguments to Play
and PlayTo
.
The first is the Animator
and the second is the Translator
, which have distinct roles.
Animator
Takes the elapsed time and returns the current value.
Translator
Reflect the value.
Requirements
- Requires Unity2019.4 or later
License
MIT License (see LICENSE)
Buy me a coffee
Are you enjoying save time?
Buy me a coffee if you love my code!
https://www.buymeacoffee.com/kyubuns
"I used it for this game!"
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