UniTaskを使う上でアニメーションライブラリは AnimeTask を愛用しています。
しかし、DoTweenなどに比べるとデフォルトで用意されている変換が少ないので、自分で作らないといけない場合があります。
例えば、透過度はActionを使って…
// 事前に sr = GetComponent<SpriteRenderer>() してSpriteRendererを取得しておく
await Anime.Play(
Easing.Create<OutCubic>(1.0f, 0.0f,2f),
TranslateTo.Action<float>(value =>
{
Color tmp = sr.color;
tmp.a = value;
sr.color = tmp;
})
);
と出来ます。
しかし、他のところでも繰り返し使う場合はいちいちActionを記述するのは面倒です。
そういう時はオリジナル Translator を実装することをおすすめします。
やり方は簡単で AnimeTask.ITranslator
というインターフェイスを使うだけです。 → 参考
Update
メソッドに更新処理を記載してください。
先ほど紹介した TranslateTo.Action
を使った透過度を変化させる処理と同じような感じで書けば大丈夫です。
SpriteRendererAlpha.cs
using UnityEngine;
using AnimeTask;
namespace AnimeTaskExt
{
public static class ExtTranslateTo
{
public static AlphaTranslator SpriteRendererAlpha(SpriteRenderer sr) => new SpriteRendererAlphaTranslator(sr);
}
public class SpriteRendererAlphaTranslator : ITranslator<float>
{
private readonly SpriteRenderer sr;
public SpriteRendererAlphaTranslator(SpriteRenderer sr)
{
this.sr = sr;
}
public void Update(float value)
{
Color tmp = sr.color;
tmp.a = value;
sr.color = tmp;
}
}
}
使う際は
using AnimeTask;
using AnimeTaskExt;
// 中略
await Anime.Play(
Easing.Create<OutCubic>(1.0f, 0.0f,2f),
ExtTranslateTo.SpriteRendererAlpha(sr)
);
のように使うことが出来ます。
現在の値から変化させたい場合は AnimeTask.IValueTranslator
を使います。
public static class ExtTranslateTo
{
public static SpriteRendererAlphaToTranslator SpriteRendererAlphaTo(SpriteRenderer sr) =>
new SpriteRendererAlphaToTranslator(sr);
}
public class SpriteRendererAlphaToTranslator : IValueTranslator<float>
{
public float Current => sr.color.a;
private readonly SpriteRenderer sr;
public SpriteRendererAlphaToTranslator(SpriteRenderer sr)
{
this.sr = sr;
}
public void Update(float value)
{
Color tmp = sr.color;
tmp.a = value;
sr.color = tmp;
}
}
await Anime.PlayTo(
Easing.Create<OutCubic>(0.5f, 2f),
ExtTranslateTo.SpriteRendererAlphaTo(sr)
);