Unity C#

【Unity C#】Instantiateで作成したオブジェクトにAnimatorControllerを割り当てる方法

投稿日:

Unity C# で Instantiate で動的に作成したオブジェクトにAnimatorController を割り当てる方法がわからずに、長時間沼ったので記事にしたいと思います。

ネットで調べたり ChatGPT も尋ねてもわからず、基本過ぎてあえて説明するまでもないという事でしょうか。

Unityでアニメーションする流れ

  • アニメーションウィンドウでアニメーションを作成
  • アニメーションコントローラーの設定
  • オブジェクトに Animator をアタッチ
  • スクリプトでアニメーション再生

アニメーションは基本的にこのような流れとなります。

シーン上に配置しているオブジェクトならこれで問題ありません。しかし、動的配置した場合 Animator がアタッチできません。

Animator animator = obj.AddComponent<Animator>();
animator.Play("testAnimation");

これに関しては addComponent で Animator をアタッチできました。

しかし、以下のようなエラーが出てしまいます。

Animator is not playing an AnimatorController

AnimatorController が割り当てられていないため、アニメーションが再生できないというエラーです。

問題は Animator はアタッチされていますが、AnimatorController は割り当てられていないという点です。

ではどうやって、割り当てるの?

色々調べると2つの方法が見つかりました。

  • Resources.Load を使う
  • アセットバンドルを使う

Resources.Load は Assets フォルダーに Resources フォルダーがないと使えませんし、現在は非推奨のようです。

アセットバンドルは非常にめんどくさそう…。

スクリプトからアニメーションを再生というよく使われそうな事なのに、こんなにも大変でしょうか?

そんな事はありませんでした。

AnimatorControllerをスクリプトから割り当てる

理解すればものすごく単純な話でした。

クラスの最初にアニメーターコントローラーの変数を定義します。

[SerializeField] RuntimeAnimatorController animationController;

するとインスペクター上からアニメーターコントローラーを割り当てられるではありませんか。

アニメーターコントローラーをここにドラッグアンドドロップしてください。

Animator animator = obj.AddComponent<Animator>();
animator.runtimeAnimatorController = animationController;
animator.Play("testAnimation");

このようにすると、動的配置したオブジェクトをアニメーションさせる事ができました。

-Unity C#

Copyright© ウェブミスト(Webmist) , 2024 AllRights Reserved Powered by STINGER.