質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

12975閲覧

別のゲームオブジェクトのスクリプトから、アニメーションを制御する方法。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

3グッド

5クリップ

投稿2017/01/21 12:19

###前提・実現したいこと

例えば、空のゲームオブジェクトにアタッチしているスクリプトから、
他のアニメーションオブジェクトのアニメーションを制御する方法は、どんな方法がありますか?

やはり、アニメーションオブジェクトにアタッチしているAnimatorを参照するしかないのでしょうか?

アニメーションのオブジェクトに関して、
どこからどこまでがアニメーションするゲームオブジェクトに紐づいていなければいけないのか
が理解できていないのかもしれません。

今、自分が理解していることは、

AnimationController → アニメーションするゲームオブジェクトのAnimatorにアタッチしてなければいけない。 Animator → アニメーションするゲームオブジェクトにアタッチしてなければいけない。

ということです。
(上記、間違えていたらご指摘お願いします。)

これらを踏まえると、空のゲームオブジェクトから、アニメーションするオブジェクトのアニメーションを
制御するには、そのAnimatorを参照するしかないということになるのですか?

例えば、上記が間違っていたら、空のゲームオブジェクトにAnimatorをアタッチして、
そのAnimatorで他のゲームオブジェクトのアニメーションを制御することができたりしますか?
もしくは、空のゲームオブジェクトから、アニメーションオブジェクトのAnimatorを参照するのではなく、
AnimationClipなどを直接参照してアニメーションを制御することができたりしますか?

usamino, magrokun, masa_go👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「アニメーションを制御する」=「AnimatonControllerのステートを変化させる」ということだとしたら、
アニメーションオブジェクトにアタッチしているAnimatorを参照するのが一般的なやり方かと思います。

例えば空のゲームオブジェクトに以下のようなスクリプトを付けて、
インスペクタ上のtargetAnimatorの部分に
(シーン上の)アニメーションオブジェクトにアタッチされたAnimatorをドラッグ&ドロップすると、
空のオブジェクトからアニメーションオブジェクトが制御出来ます。

C#

1public class Sample : MonoBehaviour { 2 public Animator targetAnimator; 3 4 void Update () { 5 if (Input.GetKeyDown ("a")) { 6 targetAnimator.SetTrigger("trigger"); 7 } 8 } 9}

>どこからどこまでがアニメーションするゲームオブジェクトに紐づいていなければいけないのか
下記サイトを見ながら実験してみるのが一番分かりやすいかと思います。
UnityのMecanimでキャラクターを動かす - Qiita
(恐らくHumanoidを使うならAvatorはモデル1体毎に作成、AnimationControllerとAnimationClipは使い回し可です。ボーンの名称と構造が全く一緒ならAvatorの使い回しも可能かもしれません)

ちなみに「Animation」というコンポーネントを使うと、AnimationClipの直接再生が可能です。(但しMecanimは使えません)
ゲーム開発初心者のためのUnity入門(4)- @IT
用途とアニメーションの内容によって使い分けるとよいかと思います。

投稿2017/01/21 16:03

sakura_hana

総合スコア11425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/22 13:50 編集

ご回答ありがとうございます。 やはり、AnimationControllerやAnimatorコンポーネントは、アニメーションを適用するゲームオブジェクトにアタッチしていなければいけないのですね(空のゲームオブジェクトにアタッチしてはいけない。) Animationコンポーネントで、AnimationClipの直接再生ができることが可能なんですね。 Animationコンポーネントは、旧来のコンポーネントということなので、用途に差が無ければ、できるだけAnimatorコンポーネントを使ったほうがいいのでしょうか?(例えば、いつかAnimationコンポーネントが廃止になるとか。)
sakura_hana

2017/01/23 07:58

>空のゲームオブジェクトにアタッチしてはいけない。 原則としてはそうなります。(実際にそうなのかは未検証) >Animationコンポーネントで、AnimationClipの直接再生ができる 誤解の無いように書くと、Animationの場合は"絶対に"アニメーションを適用するゲームオブジェクトにアタッチする必要があります。(Avatarのような仲介役がいない為) 回答欄に書いたスクリプトのように、別オブジェクトからアニメするオブジェクトのAnimationの参照を取って、Play("AnimationClipの名前")等をすればそのAnimationClipがそのまま再生されますよ、という意味です。 >例えば、いつかAnimationコンポーネントが廃止になるとか 可能性はゼロではないですね。ただ現在廃止の発表は無かったと思いますし、非推奨でもない筈なので使っていても特に問題は無いかなと思います。 私だったら、Animationで済むところはAnimationで済ませてしまいます。 例えばアニメ1つをオンオフするだけだったら、AnimatorControllerを作るのも面倒臭いのでAnimationでやります。 逆に複数のアニメを細かくオンオフしたり、アニメ遷移時のフェードが重要な場合はAnimatorを使用しますね。 この辺りは慣れや分かりやすさ、使い回しを考えて選ぶ形かと思います。
退会済みユーザー

退会済みユーザー

2017/01/23 15:31

ご回答ありがとうございます。理解が深まりました。 Animationコンポーネントは絶対にアニメーションを適用するゲームオブジェクトにアタッチする必要があるのですね。Play()で手軽に呼び出せて便利ですね。 使い分けて、Animationコンポーネントの方も活用して参りたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問