UnityChanをアニメーションさせる
Animator
- 複数Layerが配置できる
- Layerは
Baseが身体本体の歩きモーション
表情モーション
のように組み合わせられる
- UnityChan付属のAnimator
UnityChanAnimationCheck
が参考になる
- 基本的にステートマシンとして動作する
- おそらく同じ骨構成であれば別アバターにも適用できる構造のはず
アニメーションループ
- アニメーションが終わったタイミングでイベントを発火というユースケースがある
- 現在のAnimationの位置が正規化されたTime値でわかる
- 開始 => 終了で1.0
- 周回を進められるので、小数点以下が正規化された現在のループ
- 整数部がループ回数として得られる
- アニメーションがループ設定になっていない場合でも時計は進み続ける
- UnityChanの
JUMP00
で確認できる
- 時計は進むが、アニメーションは止まる
- 適切な次のアクションに切り替えてあげなければならない
- ポーズだけのアニメーションの場合、凄まじい速度で時計が進む
UniRxでループタイミングを得る方法
normalizedTime
をint変換することで、整数部の切り替わり = ループのタイミングとして検出できる。
- 0は最初の開始時となる。
_animator = GetComponentInChildren<Animator>();
_animator.UpdateAsObservable()
.Select(_ => (int) _animator.GetCurrentAnimatorStateInfo(0).normalizedTime)
.DistinctUntilChanged()
.Subscribe(loop => Debug.Log($"Animation Loop!! [{loop}]"));