LoginSignup
3
2

More than 3 years have passed since last update.

AnimeTask用のオリジナルのTranslatorを実装する方法(Spriteの透過度を変化させる)

Last updated at Posted at 2020-01-05

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)
);
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2