animation.isPlaying | unity3d レベル1

unity3d レベル1

unity3dでゲーム作りはじめました。
http://knr.ifdef.jp/
twitter: @knorsUni

キャラのアニメーションで判らなかったことが一つ解決。

ずっとアニメーションの再生が終わったら次に行くというのがわからず、


animation.Play(" "); アニメーションを再生する

animation.PlayQueued(" "); 前のアニメーションの終了を待って再生する


ここを使い分けていたが、キャラが待機状態("idle")のモーションをanimation.PlayQueued

移動("walk")をanimation.Playにした時、攻撃("attack")がうまく挟めなくなる。


------------------------------------------------------------------------------

function Update(){


animation.PlayQueued("idle");


if(Input.GetAxis("Horizontal") || Input.GetAxis("Vertical")){
animation.Play("walk");

}

if(Input.GetButtonDown("Fire1")){
animation.Play("attack");
}

}

------------------------------------------------------------------------------

例えばこんな感じにすると、止まってるときは攻撃("attack")のモーションが働くが、

動くと、すぐ("walk")のモーションになるため動きながらの攻撃が出来なくなる。

animation,PlayQueued("walk")にすれば、("idle")がループ再生の場合、いくら動いてもモーションが始まらない。

さらに if (controller.isGrounded) など地面に接地していた場合と空中の動きも追加していくと

この.Playと.PlayQueuedだけじゃどうにもならなくなってきた。

それで調べていたら素晴らしい方法があった!


animation.isPlaying


再生終了したら次のアニメーションを再生するという。

Queuedとの違いはQueuedの場合すべてのモーションに対して待機するが、

isPlayingを使えば指定したモーションの再生を対象としてくれる。使い方は


------------------------------------------------------------------------------

if (!animation.IsPlaying("a")) animation.Play("b");

------------------------------------------------------------------------------


と書く。"a"が再生していないか確認して"b"を再生する。

ちなみに !animation.IsPlaying("a") の後はanimationじゃなくても何でもいい。


これで色んなモーションを入れていけそうだ。