【Unity】iTween × コルーチンで遊ぶアニメーション!

unity_itween Unity

この記事の目的

便利なアニメーションツール「iTween」を使っていたところ
コールバック関数にコルーチン関数を指定した方が便利だと思いました!

試される方はAsset Storeからインポート!
iTween Asset Store

iTweenとは?と思われた方はこちらが参考になりました↓
Unity:簡単アニメーション、iTween の使い方(人気の無料アセット)

コルーチン関数とは?と思われた方はこちらが参考になりました↓
【Unity】はじめてのコルーチン!これさえ読めば基礎はカンペキ
古来よりUnity非同期を実現していたコルーチンとは何者か?

アニメーションのみ

 void Start()   {
       var rotateHash = new Hashtable();
       rotateHash.Add("y", 0.25f);
       rotateHash.Add("easeType", "easeInOutBack");
       
       iTween.RotateBy(this.gameObject, rotateHash);
       
       // まとめて書くこともできる
       // iTween.RotateBy(this.gameObject, iTween.Hash(
       //     "y", 0.25f,
       //     "easeType", "easeInOutBack"
       // ));

   }

このスクリプトファイルをアタッチするだけでゲームオブジェクトが動く!

“y” : 0.25f はy軸に90度回転させる
“easeType” : “easeInOutBack” はアニメーションの種類

公式のドキュメントにEaseTypeの種類は記載されています。

画像1を拡大表示

コールバック関数にアニメーションを指定

 void Start()   {
       var rotateHash = new Hashtable();
       rotateHash.Add("y", 0.25f);
       rotateHash.Add("easeType", "easeInOutBack");
       rotateHash.Add("oncompletetarget", this.gameObject);
       rotateHash.Add("oncomplete", "UpRotate");
       
       iTween.RotateBy(this.gameObject, rotateHash);

       // iTween.RotateBy(this.gameObject, iTween.Hash(
       //     "y", 0.25f,
       //     "easeType", "easeInOutBack",
       //     "oncompletetarget", this.gameObject,
       //     "oncomplete", "UpRotate"
       // ));

   }

   void UpRotate() {

       var rotateHash = new Hashtable();
       rotateHash.Add("z", -0.25f);
       rotateHash.Add("easeType", "easeInOutBack");
       
       iTween.RotateBy(this.gameObject, rotateHash);

       // iTween.RotateBy(this.gameObject, iTween.Hash(
       //     "z", -0.25f,
       //     "easeType", "easeInOutBack"
       // ));
       
 }

Start()で呼び出されたアニメーションが終了すると
UpRotate()関数を呼び出して向きを変えています。

“oncompletetarget” : this.gameObject は呼び出す関数の場所を指定
“oncomplete” : “UpRotate” は呼び出す関数名

コールバック関数にコルーチン関数を指定

// 回転数を表示するテキストオブジェクト   
private GameObject[] countText;

   void Start()
   {
       // 回転数・初速の調整
       int count = 6;
       float firstDelay = 0.5f;

       // 回転数を表示するテキストの更新
       countText = GameObject.FindGameObjectsWithTag("Text");
       foreach (GameObject text in countText) {
           text.GetComponent<Text>().text = count.ToString();
       }

       // 回転処理の実行
       Rotate(firstDelay, count);
   }

   // 回転処理
   void Rotate(float delay, int cnt) {

       var rotateHash = new Hashtable();
       rotateHash.Add("y", 0.25f);
       rotateHash.Add("easeType", "easeInOutBack");
       rotateHash.Add("delay", delay);
       rotateHash.Add("oncompletetarget", this.gameObject);
       rotateHash.Add("oncomplete", "RotateCoroutine");
       rotateHash.Add("oncompleteparams", cnt);  // 追記。引数を送る

       iTween.RotateBy(this.gameObject, rotateHash);

   }

   // 回転数が0になるまで、回転数を表示して0.5秒ごとに回転処理を実行する
   IEnumerator RotateCoroutine(int cnt) {

       // 回転数を表示
       cnt--;
       foreach (GameObject text in countText) {
           text.GetComponent<Text>().text = cnt.ToString();
       }

       // 0.5秒停止
       yield return new WaitForSeconds(0.5f);

       // 回転数が0でないなら回転処理を実行。0ならコルーチン関数を止める
       if (cnt != 0) {
           Rotate(0, cnt);
       } else {
           StopAllCoroutines();
       }

   }

今回は繰り返し実行するために回転処理を関数に分けてます。
IEnumerator 関数名() と宣言されているのがコルーチン関数です。

“oncompleteparams” : cnt は呼び出す関数に渡す引数を指定
StopAllcoroutines() は全コルーチンを停止

まとめ

今回はUnityのアニメーションツール「iTween」で
コルーチンを使ってみました!

使い立てで不足あると思いますが、
オススメの使い方などあればコメントお願いします!

iTweenを使ってみたい読者の参考になれましたら幸いです。

Unity学習のオススメ参考書

コメント

タイトルとURLをコピーしました