【Unity】AnimancerProについて
1.AnimancerProとは?
AnimatorControllerを使わず、Scriptで直接アニメーションを制御するアセットです!
(まだほとんど使っていないので、手抜き記事となります。今後改訂する可能性があります。)
ステートマシンがスパゲッティになることに悩むこともありません。
2.注意点
(1)一度アニメーションしたら動かなくなる場合
Animancer Proを使用し、以下のようなコードでボタンをクリックしたときのアニメーションをつけてみたが、一度だけアニメーションして動かなくなってしまいました。
[Header("Animancer")][SerializeField]AnimancerComponent animancer;
[Header("クリック時アニメーション")][SerializeField]AnimationClip pressed;
////////中略//////////
private void AnimePlay() {
if (animancer == null) return;
animancer.Play(pressed, 0.1f);
}
理由としては、一度pressedのアニメーションが再生された後、そのままもう一度pressedのアニメーションを再生することはできないようで、pressedから一度notPressed(通常時、アイドル時)のアニメーションを挟んで、再度pressedのアニメーションをさせる必要があります。
修正後のコードは以下のようになります。
[Header("Animancer")][SerializeField]AnimancerComponent animancer;
[Header("クリック時アニメーション")][SerializeField]AnimationClip pressed;
[Header("非クリック時アニメーション")][SerializeField]AnimationClip notPressed;
////////中略//////////
private void AnimePlay() {
if (animancer == null) return;
var state = animancer.Play(pressed, 0.1f);
state.Events.OnEnd = () => animancer.Play(notPressed, 0.1f);
}
なお、安全面を考慮し、Buttonコンポーネントの遷移は「アニメーション」から「なし」に変更しています。
Buttonの遷移の「アニメーション」は短いクリックだと、アニメーションが再生されないことが多々ありましたが、Animancer Proでコードを使用して呼び出すと、そのようなこともなくなりました。非常にいいです。
(2)アニメーション完了時にイベントを実行する
以下のコードは_openClipアニメーション完了時に3つイベントを実行しています。
var state = _animancer.Play(_openClip);
state.Events.OnEnd = () => {
_animancer.Play(_idleClip);
IsTransition = false;
//ボタンを押せるようにする
foreach (var button in _openButton)
button.enabled = true;
};
ラムダ式?殆ど書いたことがなかったので、間違えた書き方をして、しばらく混乱してました。
//この書き方が正しい
state.Events.OnEnd = () => { イベント1;イベント2;イベント3;};
//この書き方は誤り(イベント3しか実行されない)
state.Events.OnEnd = () => { イベント1;};
state.Events.OnEnd = () => { イベント2;};
state.Events.OnEnd = () => { イベント3;};
(3)Action On Disable
「Animancer.AnimancerComponentを無効にするときに実行するアクション」らしいです。デフォルト値は停止(Stop)です。
Stop(停止) すべてのアニメーションを停止し、巻き戻しますが、アニメーションの値はそのまま残します。
Pause(一時停止) すべてのアニメーションを現在の状態で一時停止し、後で再開できるようにします。
Continue(続行) 非アクティブ時もプレーを続ける。
Reset(リセット) すべてのアニメーションを停止し、巻き戻し、オブジェクトを元の状態に強制的に戻します。
Destroy(破棄) UnityEngine.Playables.PlayableGraphとそのすべてのレイヤーとステートを破棄します。
3.参考記事
以下の2記事が大変事細かに書かれているので、困ることはないと思います。
この記事が気に入ったらサポートをしてみませんか?