Posted at

async/awaitでTweenアニメーション書けたら便利なんじゃないかと思った


はじめに

今年の2月にAnimeRxというRxでTweenアニメーション書けるライブラリを作りました。

詳細はこちら

ですが、この半年の間でUnityのasync/awaitにも春がやってきました。

Rxで書けるのも便利だったんですけど、アニメーションってasync/awaitの方が向いてるんじゃね?と思ってTask版も作ってみたわけです。


使い方

UnityPackageはこちらからダウンロード出来ます。

Unity2018.3b3でしか挙動確認していません。

using System;

using AnimeTask;
using AnimeTask.Easing;
using UnityEngine;
using UnityEngine.UI;

public class Development : MonoBehaviour
{
[SerializeField] private Text text;

public async void Start()
{
Debug.Log("Move Start");

await Anime.Play(
OutBack.Animation(new Vector3(-5f, 0f, 0f), new Vector3(5f, 0f, 0f), TimeSpan.FromSeconds(2f)),
TranslateTo.LocalPosition(transform)
);

await Anime.Play(
OutExpo.Animation(new Vector3(5f, 0f, 0f), new Vector3(5f, 3f, 0f), TimeSpan.FromSeconds(2f)),
TranslateTo.LocalPosition(transform)
);

await Anime.Play(
Linear.Animation(0, 100, TimeSpan.FromSeconds(2f)),
TranslateTo.Text(text, "{0}pt")
);

await Anime.Play(
Linear.Animation(0, 100, TimeSpan.FromSeconds(2f)),
TranslateTo.Action<float>(x => Debug.Log(x))
);

Debug.Log("Move End");
}
}

こんな感じで出来ます。2つ同時にやりたいときはTask.WhenAllとか使うと良い感じなんじゃないでしょうか。