みかづきメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Unity で Animator Controller を動的生成したい

前回、 Animation を動的に生成しましたが、 Controller の方はテンプレートでした。
今回はそこも C# Script から生成してみました。
ちなみに動機は同じですが仕様上不可能だと分かったので供養としておいておきます。


Animator Controller の生成自体も、基本は Animation を変わりません。
Controller のインスタンスを作っていじっていけば OK です。

var controller = new AnimatorContorller();
controller.AddParameter("ParameterId", AnimatorControllerParameterType.Int);

ただ、レイヤーなどを追加する場合は、それぞれのインスタンスを作ってから Add を呼ぶのでは無く、 Add を経由してから行ったほうが楽です。 (もろもろのデフォルト設定が適用されるため)。

// Layer 追加
controller.AddLayer("Base Layer");
var layer = controller.layers[0];
var stateMachine = layer.stateMachine;

// State 追加
var state = stateMachine.AddState("State1");

// Transition 追加
var transition = stateMachine.AddAnyStateTransition(state);

// Condition 追加はそのままで OK
transition.AddCondition(AnimatorConditionMode.Equals, 1, "ParameterId");

このとき、一番最初に追加された State に対して、 Default State として設定されます。
あとは CreateAsset で保存して上げれば、 Animator Controller が作成されます。

ということでメモでした。