Animator

「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);

表示オプション

横に並べて表示:
変化行の前後のみ表示: