0 支持
45 閲覧

~解決したいこと~
スペースキーを押して「anim.Play」でアニメーションを直接再生させた後、アニメーションの「normalizedTime」が1以上になった時にスペースキーを押す前の状態に戻したい。

~試したこと~
「anim.Play」で再生した状態から元に戻す方法をいろいろと調べたのですが、わかりませんでした。

アドバイスなどあればよろしくお願いします。なお、スクリプトは以下とおりで、「anim」にはアニメーターが入っています。 Debug.Log("アニメーション完了") の部分で「anim.Play」をリセット(?)するようにしたいです。

~Playerのスクリプト~

private Animator anim = null;

void Start()
{
    anim = GetComponent<Animator>();
}

void Update()
{
    if (Input.GetKey(KeyCode.Space))
    {
        anim.Play("Player_Guard");

        AnimatorStateInfo currentState = anim.GetCurrentAnimatorStateInfo(0);
        if (currentState.IsName("Player_Guard"))
        {
            if (currentState.normalizedTime >= 1)
            {
                Debug.Log("アニメーション完了");
            }
        }
    }
}
初心者 (140 ポイント) | 45 閲覧

ログインまたはユーザー登録してから回答してください。

回答 1

0 支持

スペースキーを押す前のステートに戻りたいということであれば、

  1. Playで再生するステートから、戻り先のステートにAnimatorで矢印を伸ばす
  2. 矢印のHasExitTimeにチェックがあることを確認する
  3. Playで再生するAnimationClipのloop timeのチェックを外す

これだけで、アニメーションが最後まで再生されれば自然と元のステートに戻るようになります。

あらゆるステートからPlayされるため、戻り先がどこになるのか分からない!という状況であれば、まずスペースキーを押した後、かつPlayを呼び出す前の段階でanim.GetCurrentAnimatorStateInfoを使い、現在のステート情報を取得しておきましょう。

その後、

Debug.Log("アニメーション完了");

の位置で、再度Playメソッドで先ほど取得したStateInfoを使って再生させれば戻れます。

初心者 (200 ポイント)
0
ありがとうございます!

関連する質問

0 支持
0 回答
0 支持
0 回答
bassan 初心者 (120 ポイント) 2 週間 質問 | 20 閲覧
0 支持
0 回答
kumao23 初心者 (220 ポイント) 2 週間 質問 | 21 閲覧
0 支持
1 回答
2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

157 質問

153 回答

159 コメント

188 ユーザー