Unityのアニメーションはデフォルトでループします。
そうではなく、例えば入力があったときに1回だけアニメーションさせたい場合です。
アニメータを使う方法と、旧レガシーアニメーションを使う方法を書きます。
そうではなく、例えば入力があったときに1回だけアニメーションさせたい場合です。
アニメータを使う方法と、旧レガシーアニメーションを使う方法を書きます。
<アニメータを使用する場合>
1.Animatorファイルを作成する
2.Animatorコンポーネントを追加し、Animatorファイルをアタッチする
3.Animationファイルを作成する
4.Animatorファイルのステートを作成する
①空のステートを作成する。
「右クリック」→「Create State」→「Empty」
②空のステートをデフォルトにする。
「New Stateを選択し右クリック」→「Set as Layer Default State」
※入力があった時に動作させたいので、最初のアニメーションは空にしておきます
③トリガパラメータを作成する。
「左上の+を押す」→「Trigger」
④作成したAnimationファイルへの遷移を作成する。
「New Stateを選択し右クリック」→「Make Transition」
⑤遷移条件をトリガにする。
5.作成したAnimationファイルのループを外す。
「Projectのアニメーションを選択」→「Loop Timeのチェックを外す」
※1回だけ動作させるときはループを外します
6.スクリプトを記述しアタッチする
using UnityEngine;
using System.Collections;
public class OnceAnimation : MonoBehaviour {
void Update () {
if (Input.GetButtonDown("Fire1") ) {
// アニメーターで動かす
GetComponent<Animator>().SetTrigger("OnceAnim");
}
}
}
<旧レガシーアニメーションを使用する場合>
1.Animationファイルを作成する
2.Animationコンポーネントを追加し、Animationファイルをアタッチする。Play Automatically のチェックを外す。
※チェックがあると、シーン起動時にすぐアニメーションします。

3.Animationファイルをデバッグモードで開き、Legacy をチェックします。
「右上のマーク」→「Debug」
※Legacyアニメーションの場合、必要です

4.スクリプトを記述しアタッチする
using UnityEngine;
using System.Collections;
public class OnceAnimationLegacy : MonoBehaviour {
void Update () {
if (Input.GetButtonDown("Fire1") ) {
// 旧アニメーションで動かす
GetComponent<Animation>().Play("CubeAnimationLegacy");
}
}
}
<実行例>Cubeがアニメータ、Capsuleがレガシー。今回同じアニメーションなので同じ動きをしています。

- 関連記事
-
- ドローコール削減のため、マテリアルを1つにしてテクスチャのUVを変更
- UnityとC++ライブラリ間の値の受け渡し
- Unityのアニメータで1回だけアニメーションさせる
- PlayerPrefsではなく、自前ファイルに入出力
- UnityからサーバへHTTPリクエストを送り、レスポンスを受け取る
コメント