この記事の目的
便利なアニメーションツール「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の種類は記載されています。
コールバック関数にアニメーションを指定
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を使ってみたい読者の参考になれましたら幸いです。
コメント