(この記事の使用環境: Unity5.5.0f3 Personal、Windows10


無料アセット「iTween」の EaseType を自動で順番に動かしてみました。

iTweenはこれ。良く知られている人気アセットのようですね。



iTweenには多くの関数やパラメータが用意されており、それらを使ってオブジェクトに対して面白い動作を簡単に実装できるようになっています。

ドキュメントも整備されています。
iTween for Unity by Bob Berkebile (pixelplacement)
EaseTypeの仕様はこちら

このドキュメントを参照しながら実装すればよいのですが、なにしろいじり回せる項目がたくさんあって悩んでしまいます(うれしい悩みですが)。動きに関するものなので、文字だけ読んでもイメージしにくいこともあります。


ということで、自動で順番に動かしてみようと思い立ったのです。
SnapCrab_NoName_2017-3-20_11-48-10_No-00

動画はこんな感じ。




考え方はこんな感じ。
  • iTweenのEaseTypeをすべて取得し、foreachで順番に動かす
  • 動かしているEaseTypeが分かるようテキストUIに情報を表示する
  • ゆっくり動作を確認したいこともあるので、移動時間などはインスペクタ―から指定できるようにする
  • EaseTypeを個別にも確認できるよう、インスペクタ―からも指定できるようにする
  SnapCrab_NoName_2017-3-20_11-59-42_No-00

スクリプトはこんな感じ。Enum.GetValues関数を初めて使ってみましたが、便利ですね。
また、Enum型のパラメーターはpublic指定することでインスペクタ―からプルダウンメニューで値を選択することができます(上図参照)。
using System;               // Enum.GetValues関数を使うために追記
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


// --- iTweenの動作確認用 ----------------------------------------------
public class iTweenController : MonoBehaviour
{
    public GameObject target;           // 動かすオブジェクト(インスペクタ―から指定)
    public Transform startPos;          // 動作の開始位置(インスペクタ―から指定)
    public Transform targetPos;         // 動作の終了位置(インスペクタ―から指定)
    public iTween.EaseType easetype;    // iTweenのeasetype(インスペクタ―からの指定用)
    public float moveTime = 3f;         // 移動時間
    public float offsetTime = 1f;       // 次のeasetypeに移るまでのオフセット時間

    public Text infoText;               // 画面に情報表示するテキストUI


    // --- 初期化 ------------------
    private void Start ()
    {
        //StartCoroutine (OneEaseTypeTest (easetype));      
    }

    // --- インスペクタ―から指定したeasetypeを個別に動かすコルーチン -------------------
    IEnumerator OneEaseTypeTest (iTween.EaseType easetype)
    {
        infoText.text = "easetype: " + easetype;        // テキストUIへのタイプ表示

        iTween.MoveTo (target, iTween.Hash (            // iTween.MoveTo で動かす
            "position", targetPos.position,             // 移動先の指定
            "time", moveTime,                           // 移動時間の指定
            "easetype", easetype                        // easetypeの指定
            ));

        yield return new WaitForSeconds (moveTime + offsetTime);    // 待機
        target.transform.position = startPos.position;              // 元の位置に戻す
    }


    // --- 更新処理 ----------------------------------------------
    private void Update ()
    {
        if (Input.GetMouseButtonDown (0))           // マウスクリックしたら開始
        {
            StartCoroutine (AllEaseTypeTest ());
        }
    }

    // --- すべてのeasetypeを連続して動かすコルーチン ------------------------------
    IEnumerator AllEaseTypeTest ()
    {
        // すべてのiTWeen.EaseTypeを取得し、動かす
        foreach (iTween.EaseType type in Enum.GetValues(typeof(iTween.EaseType)))
        {
            if (type.ToString () == "punch") continue;  // iTween.EaseType.punchはエラーになるのでスキップする

            infoText.text = "easetype: " + type;        // テキストUIへのタイプ表示

            iTween.MoveTo (target, iTween.Hash (        // iTween.MoveTo で動かす
                "position", targetPos.position,         // 移動先の指定
                "time", moveTime,                       // 移動時間の指定
                "easetype", type                        // easetypeの指定
                ));

            yield return new WaitForSeconds (moveTime + offsetTime);    // 待機
            target.transform.position = startPos.position;              // 元の位置に戻す
        }
    }
}


おまけ。iTweenのメソッドを「MoveTo」ではなく「ScaleTo」と「RotateTo」に変えて試してみた動画です。






今回は以上です。
(管理情報: AssetTest  > iTween_Test > Main