【ハルシオンブログ】Animatorでアニメーション管理しているときに終了を待ったりスキップしたりしたかった
こんにちは。
大坂です。
Animtorを使用しているときにスクリプトでアニメーションの終了を待ったり、アニメーションを最後まで飛ばしたいときのお話。
終了を待つのはこんな。
なんか1フレーム待たないとうまく動かないみたいです。
AnimatorのLayer変えてる場合は「GetCurrentAnimatorStateInfo(0)」の「0」を変える必要があります。
BaseLayer使っているならそのままです。
さて続いて最後まで飛ばしたいとき
こんな感じですね。
まぁ実際にはアニメーションを動かしてすぐに最後に飛ばすなんてことはないと思うので工夫して使ってください!
では今週もこの辺でノシ
大坂です。
Animtorを使用しているときにスクリプトでアニメーションの終了を待ったり、アニメーションを最後まで飛ばしたいときのお話。
終了を待つのはこんな。
private IEnumerator PlayAnimation()
{
var animator = GetComponent<Animator>();
animator.SetTrigger("Show");
// Animatorのステート変更に1フレームかかるので待つ
yield return new WaitForEndOfFrame();
// 終了するまで待つ
yield return new WaitWhile(() => animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1f);
Debug.Log("アニメーション 終わったよ。");
}
なんか1フレーム待たないとうまく動かないみたいです。
AnimatorのLayer変えてる場合は「GetCurrentAnimatorStateInfo(0)」の「0」を変える必要があります。
BaseLayer使っているならそのままです。
さて続いて最後まで飛ばしたいとき
private IEnumerator SkipAnimation()
{
var animator = GetComponent<Animator>();
animator.SetTrigger("Show");
// Animatorのステート変更に1フレームかかるので待つ
yield return new WaitForEndOfFrame();
// アニメーションの最後にする
animator.Play(animator.GetCurrentAnimatorStateInfo(0).fullPathHash, 0, 1);
}
こんな感じですね。
まぁ実際にはアニメーションを動かしてすぐに最後に飛ばすなんてことはないと思うので工夫して使ってください!
では今週もこの辺でノシ
Category: 開発日記(Unity)
« 【ハルシオンブログ】「A~Cからランダムで取得」的なやつを重みづけでランダム取得してますよ。これより簡単な方法ってありますか? | 【ハルシオンブログ】ListをLinqを使って並び替え。第2キーもつかえるよ! »
コメント
| h o m e |