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)
[SerializeField] private AnimationCurve sample12 = default;
public async UniTask Sample12()
{
await Moving.AnimationCurve(sample12).ToLocalPositionX(cube);
}
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());
If an update timing is specified in the scheduler, values can be updated at times other than Update.
public class CustomScheduler : IScheduler
{
public float DeltaTime => Time.deltaTime;
public PlayerLoopTiming UpdateTiming => PlayerLoopTiming.PreUpdate;
}
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);
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))
.ToLocalPositionX(cubes[0]);
Supporting IProgress
await Easing.Create<Linear>(2f).ToProgress(Progress.Create<float>(x => Debug.Log(x)));
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);
- Cancel (using CancellationToken) will stop at the position at the moment of
Cancel
. - Skip (using SkipToken) will move to the last position at the moment of
Skip
.
var skipTokenSource = new SkipTokenSource();
Easing.Create<OutCubic>(new Vector3(5f, 0f, 0f), 5f).ToLocalPosition(cubes[0], default, skipTokenSource.Token).Forget();
await UniTask.Delay(TimeSpan.FromSeconds(1));
skipTokenSource.Skip();
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);
});
- Import AnimeTask via Package Manager
https://github.com/kyubuns/AnimeTask.git?path=Assets/AnimeTask
- Import AnimeTask via UnityPackage
- Import UniTask
- Import UnityPackage
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 Unity2020.3 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