質問: ### 前提・実現したいこと 例えば、空のゲームオブジェクトにアタッチしているスクリプトから、 他のアニメーションオブジェクトのアニメーションを制御する方法は、どんな方法がありますか? やはり、アニメーションオブジェクトにアタッチしているAnimatorを参照するしかないのでしょうか? アニメーションのオブジェクトに関して、 どこからどこまでがアニメーションするゲームオブジェクトに紐づいていなければいけないのか が理解できていないのかもしれません。 今、自分が理解していることは、 ``` AnimationController → アニメーションするゲームオブジェクトのAnimatorにアタッチしてなければいけない。 Animator → アニメーションするゲームオブジェクトにアタッチしてなければいけない。 ``` ということです。 (上記、間違えていたらご指摘お願いします。) これらを踏まえると、空のゲームオブジェクトから、アニメーションするオブジェクトのアニメーションを 制御するには、そのAnimatorを参照するしかないということになるのですか? 例えば、上記が間違っていたら、空のゲームオブジェクトにAnimatorをアタッチして、 そのAnimatorで他のゲームオブジェクトのアニメーションを制御することができたりしますか? もしくは、空のゲームオブジェクトから、アニメーションオブジェクトのAnimatorを参照するのではなく、 AnimationClipなどを直接参照してアニメーションを制御することができたりしますか?
回答: 「アニメーションを制御する」=「AnimatonControllerのステートを変化させる」ということだとしたら、 アニメーションオブジェクトにアタッチしているAnimatorを参照するのが一般的なやり方かと思います。 例えば空のゲームオブジェクトに以下のようなスクリプトを付けて、 インスペクタ上のtargetAnimatorの部分に (シーン上の)アニメーションオブジェクトにアタッチされたAnimatorをドラッグ&ドロップすると、 空のオブジェクトからアニメーションオブジェクトが制御出来ます。 ``` public class Sample : MonoBehaviour { public Animator targetAnimator; void Update () { if (Input.GetKeyDown ("a")) { targetAnimator.SetTrigger("trigger"); } } } ``` >どこからどこまでがアニメーションするゲームオブジェクトに紐づいていなければいけないのか 下記サイトを見ながら実験してみるのが一番分かりやすいかと思います。 UnityのMecanimでキャラクターを動かす - Qiita (恐らくHumanoidを使うならAvatorはモデル1体毎に作成、AnimationControllerとAnimationClipは使い回し可です。ボーンの名称と構造が全く一緒ならAvatorの使い回しも可能かもしれません) ちなみに「Animation」というコンポーネントを使うと、AnimationClipの直接再生が可能です。(但しMecanimは使えません) ゲーム開発初心者のためのUnity入門(4)- @IT 用途とアニメーションの内容によって使い分けるとよいかと思います。