Unity 初めてAnimatorをまともに触った
あいさつ
どうも、はかせです。
最近Unityが続いています。
今日も今日とてUnityです。
今日はAnimatorですよ。
便利だけどメンドクサイAnimator
AnimatorはノードベースでAnimationの遷移等を管理できるものです。
ノードベースなのでスクリプトを一行も書かずにAnimationの追加、遷移ができます。
おまけに今のAnimationの再生状況が書くノードの下らへんにシークバーで表示もされるという
ぶっちゃけこれがあればAnimationとかちょろくね?って思うくらいGUIのみでAnimationの管理ができます。
そうGUIでならね。
メンドクサイのはスクリプトを絡ませようとした時です。
単純にAnimationのタイミングに合わせてやるだけならAnimationEventを使えば
ほぼGUIで実現できます。
ただスクリプトでAnimatorの遷移を管理しようとか思い出したら沼にハマります。
大人しくGUIでやりましょう。スクリプトなんぞ要らんのです。
と言わんばかりにスクリプトで操作するのはだるいです。
まずAnimation遷移ですが基本は専用のパラメータをAnimatorに用意して
Set○○系のメソッドに値を渡して遷移させます。
SetBool("設定したパラメータの名前",設定する値); SetFloat("設定したパラメータの名前",設定する値); SetInteger("設定したパラメータの名前",設定する値);
こいつの何が使いづらいかって
パラメータの名前がstring型で完全一致を要求してくるところです。
string型の文字列なんで予測変換も出ないですし
間違っていても警告一つでません。
そして今どのパラメータがどの値かを把握しきらなければ
意図したとおりの遷移もなかなかしてくれません。
多分ステートマシンやらなにやらとかとうまいこと折り合いをつけて
使うために必要なことだったんでしょう。
確かにState Machine Behaviourとかを継承して
スクリプトをノードにぶち込むとかもありますが、
ただAnimationを制御したいだけにしては手間がかかりすぎてる感じがします。
他にもAnimationの再生状態を直接取得する術がなく
再生時間などから再生状況を自前で判断するしかないとか
正直使いづらいです。
その程度Animatorの中に詰め込んでおいてほしいです。
まぁぐちぐち言っててもUnityさんがAnimatorを
スクリプトから扱いやすくしてくれるとはとても思えないので
なんかごにょるしかないです。
Animatorごにょり案
ネット上にも結構落ちてる方法ですが
AnimationClipを矢印で繋がずに
全て独立しておいておきスクリプト側で遷移を判断して
Animationを直接呼び出すやり方を私はよくやります。
そんなんするならAnimatorでなくていいやんって言われそうですが、
UnityでAnimationしたければほぼ絶対ついてくるので仕方ありません。
インスペクタなりでAnimationの名前を設定し
Animator.Play(Animator.StringToHash("Animationの名前"));
これで呼びます。
あとは呼ぶタイミングをうまいことするだけです。
あとがき
今回はUnityAnimatorの愚痴でした。
使いづらいですが
Unityの思考的におそらくノンコーディングを目指してると思うので
ある意味正しい形なんだと思います。
(私が異端者ですw)
異端者は異端者なりにUnityに向かい合いたいと思います。
それでは今回はこの辺でノシ