「Animator」の編集履歴(バックアップ)一覧はこちら
「Animator」(2015/05/30 (土) 13:37:41) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*使い方
①Animatorを作る
②既存のAnimationをドロップすると「State」ができる。
③「State」同士をTransitionを作って結ぶ
③Animatorの右上のタブからParametersを選び、「+」で任意のフラグを追加する(例えばBoolで作って、チェックを入れる)
④transitionをクリックして③で作ったフラグの条件true/falseをconditionを追加する
⑤AnimatorにAddしているscriptからフラグを制御して、stateの遷移を制御する
if (Input.GetKey(KeyCode.Space))
anim.SetBool ("DoWin", true);
else
anim.SetBool ("DoWin", false);
例えば、スペースキーを押したままにすると、DoWinフラグがtrueになり、
Animatorで作った遷移に従って、該当のAnimationが再生される
*遷移を簡単に記述する方法
例えば、Playerがチョップをするモーションの場合、チョップが終わると必ずIdleに戻るので、
戻る遷移は、条件を無くして、has exit timeを残しておく。
こうすれば、モーション完了まではモーションが継続し、終わったらIdleに自動的に戻る。
わざわざflagをfalseにする処理を入れるのは無駄だし、モーション完了が分からないので、
曖昧なタイマーを仕込むことに成る。
*animationのBlend
AnimatorのAnimationは、遷移する時に、Animation同士のブレンドがされて、自然な変化になるように調整される。ブレンドの割合は、transitionをクリックして選択したsettingsで調整できる
ただし、2DのSpriteではBlendなんてできないので不要
*2DでのAnimation
multiple指定のSpriteで、SpriteEditorから複数のモーションを選択して設定することで、
その複数シーンを連続して再生するAnimationが作られ、かつ、Animatorに一つのstateとして登録される
*アニメーションを止める方法
animator.speed = 0;
*AnimatorStateInfo
Animator anim;
int runStateHash = Animator.StringToHash("Base Layer.Run");
// 予めハッシュを取得しておく Runがstateの名前
void Start()
{
anim= GetComponent<Animator>();
}
void Update()
{
AnimatorStateInfo stateInfo = anim.GetCurrentAnimatorStateInfo(0); //0はLayer番号
stateInfo.nameHashにAnimatorの現在のステートのハッシュが入っている
if( stateInfo.nameHash == runStateHash) { ... }
//走っている状態の時といった条件が指定できる
}
*Animatorの遷移をコードで行う
http://tsubakit1.hateblo.jp/entry/2015/02/11/223849
参考
parametersを設定してフラグをon/offするのは設定が面倒なので、
コードで直接遷移を実現する方法
CrossFade関数は、アニメとアニメをブレンドして実行する
第一引数はstateの名称
スペースキーを押すと前に進む
public class GirlController : MonoBehaviour {
Animator animator;
void Start () {
animator = GetComponent<Animator> ();
animator.Play ("Idle");
}
void Update () {
if (Input.GetKeyDown (KeyCode.Space)) {
animator.CrossFade("Walk",1f);
}
}
}
CrossFade仕様
http://docs.unity3d.com/ScriptReference/Animator.CrossFade.html
*Animationをコードから指定する
参考
http://unitylab.wiki.fc2.com/wiki/%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3
AddComponentでAnimationを追加する
sizeに登録したいanimationの数を入れて、
Elementにドロップして登録する
単純に再生するときは、
animation.Play ("idle");
現在のアニメーションからブレンドして再生する時は、
animation.CrossFade ("Run", 0.5f);
*最初から再生させる
animation.CrossFadeQueued ("up_sword", 0.5f, QueueMode.CompleteOthers);
//通常のクロスフェードと若干異なり最初から再生される
//CrossFade()側を使うとloopの場合、フレームがStopしてもクリアされず進んだ状態で記憶されている
*アニメ遷移時にイベント起動
AnimationEvent ev = new AnimationEvent ();
ev.time = 0.0f;
ev.functionName = "StepSound";
ev.floatParameter = 1.0f;
animation ["run"].clip.AddEvent (ev);
*使い方
①Animatorを作る
②既存のAnimationをドロップすると「State」ができる。
③「State」同士をTransitionを作って結ぶ
③Animatorの右上のタブからParametersを選び、「+」で任意のフラグを追加する(例えばBoolで作って、チェックを入れる)
④transitionをクリックして③で作ったフラグの条件true/falseをconditionを追加する
⑤AnimatorにAddしているscriptからフラグを制御して、stateの遷移を制御する
if (Input.GetKey(KeyCode.Space))
anim.SetBool ("DoWin", true);
else
anim.SetBool ("DoWin", false);
例えば、スペースキーを押したままにすると、DoWinフラグがtrueになり、
Animatorで作った遷移に従って、該当のAnimationが再生される
*遷移を簡単に記述する方法
例えば、Playerがチョップをするモーションの場合、チョップが終わると必ずIdleに戻るので、
戻る遷移は、条件を無くして、has exit timeを残しておく。
こうすれば、モーション完了まではモーションが継続し、終わったらIdleに自動的に戻る。
わざわざflagをfalseにする処理を入れるのは無駄だし、モーション完了が分からないので、
曖昧なタイマーを仕込むことに成る。
*animationのBlend
AnimatorのAnimationは、遷移する時に、Animation同士のブレンドがされて、自然な変化になるように調整される。ブレンドの割合は、transitionをクリックして選択したsettingsで調整できる
ただし、2DのSpriteではBlendなんてできないので不要
*2DでのAnimation
multiple指定のSpriteで、SpriteEditorから複数のモーションを選択して設定することで、その複数シーンを連続して再生するAnimationが作られ、かつ、Animatorに一つのstateとして登録される
*アニメーションを止める方法
animator.speed = 0;
*AnimatorStateInfo
Animator anim;
int runStateHash = Animator.StringToHash("Base Layer.Run");
// 予めハッシュを取得しておく Runがstateの名前
void Start()
{
anim= GetComponent<Animator>();
}
void Update()
{
AnimatorStateInfo stateInfo = anim.GetCurrentAnimatorStateInfo(0); //0はLayer番号
stateInfo.nameHashにAnimatorの現在のステートのハッシュが入っている
if( stateInfo.nameHash == runStateHash) { ... }
//走っている状態の時といった条件が指定できる
}
*Animatorの遷移をコードで行う
http://tsubakit1.hateblo.jp/entry/2015/02/11/223849
参考
parametersを設定してフラグをon/offするのは設定が面倒なので、
コードで直接遷移を実現する方法
CrossFade関数は、アニメとアニメをブレンドして実行する
第一引数はstateの名称
スペースキーを押すと前に進む
public class GirlController : MonoBehaviour {
Animator animator;
void Start () {
animator = GetComponent<Animator> ();
animator.Play ("Idle");
}
void Update () {
if (Input.GetKeyDown (KeyCode.Space)) {
animator.CrossFade("Walk",1f);
}
}
}
CrossFade仕様
http://docs.unity3d.com/ScriptReference/Animator.CrossFade.html
*Animationをコードから指定する
参考
http://unitylab.wiki.fc2.com/wiki/%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3
AddComponentでAnimationを追加する
sizeに登録したいanimationの数を入れて、
Elementにドロップして登録する
単純に再生するときは、
animation.Play ("idle");
現在のアニメーションからブレンドして再生する時は、
animation.CrossFade ("Run", 0.5f);
*最初から再生させる
animation.CrossFadeQueued ("up_sword", 0.5f, QueueMode.CompleteOthers);
//通常のクロスフェードと若干異なり最初から再生される
//CrossFade()側を使うとloopの場合、フレームがStopしてもクリアされず進んだ状態で記憶されている
*アニメ遷移時にイベント起動
AnimationEvent ev = new AnimationEvent ();
ev.time = 0.0f;
ev.functionName = "StepSound";
ev.floatParameter = 1.0f;
animation ["run"].clip.AddEvent (ev);