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

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

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

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

Q&A

解決済

1回答

6824閲覧

Animatorを参照できない。

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

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

0グッド

0クリップ

投稿2017/01/14 06:40

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

フィールドにAnimatorを参照するコードを書いたのですが、インスペクターで参照設定ができません。
ご教授のほどよろしくお願いします。

C#

1public class Sample : MonoBehaviour { 2 3 ///アニメーション 4 [SerializeField] Animator animeData; 5

###試したこと

①Chara01のオブジェクトで「Chara01」というAnimatorを作成しました。

イメージ説明

②空のゲームオブジェクト、GameObjectにSampleクラスをアタッチして、SampleクラスでAnimatorを参照するフィールドを設けました。

C#

1public class Sample : MonoBehaviour { 2 3 ///アニメーション 4 [SerializeField] Animator animeData; 5

③インスペクタで、アセットの「Chara01」のAnimatorを、手順②のSampleクラスのフィールドにドラッグ&ドロップしたいのですが、できません。

イメージ説明

ご教授のほどよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

質問主さんがドラッグ&ドロップしようとしているオブジェクトは「AnimatorController」です。
「Animator」コンポーネントとは別物です。

投稿2017/01/14 10:00

sakura_hana

総合スコア11427

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

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

退会済みユーザー

退会済みユーザー

2017/01/21 04:14

ご回答ありがとうございます。 AnimatorControllerとAnimatorコンポーネントの違いがよくわかっていませんでした。 SetFloat()やSetTrigger()は、AnimatorControllerのパラメータを弄っているので、 AnimatorControllerから呼び出すメソッドと思っていましたが、 実際は、Animatorコンポーネントから呼び出すメソッドなのですね? (ちょっとイメージ的には納得いきませんが。) あまりAnimatorControllerをコードで記述する機会ってないのでしょうか。
sakura_hana

2017/01/21 05:21

■AnimatorController いわゆるステートマシン。 「各ステートの名称」「再生されるアニメーションクリップ」「ステート遷移に使う変数(floatやint)」などの情報を持ちます。 公式リファレンス:https://docs.unity3d.com/ja/current/Manual/AnimatorControllerCreation.html ■Animator アニメーションを追加(再生)するもの。 Avatarを管理したり「AnimatorControllerを制御する」もの。 公式リファレンス:https://docs.unity3d.com/ja/current/Manual/class-Animator.html >実際は、Animatorコンポーネントから呼び出すメソッドなのですね? その通りです。 SetTrigger等は最終的にはAnimatorControllerのパラメーターを変更していますが、 「Animatorが管理した方が都合が良い」という設計思想の下、Animatorがメソッドを持っています。 例え話をすると…… AnimatorController:楽器。形や音色は違っても「ドの音を出す」という能力を持っている。 Animator:演奏者。自分の持っている楽器を演奏出来る。 楽器は音を出す能力は持っているが、演奏者が居ないと何も出来ない。 演奏者は楽器を持っていないと何も出来ない(音を出せない)が、持っていれば楽器の「ドの音を出す」という能力を発揮出来る。 この「音を出す」の部分が「SetFloat」等に当たります。 「実際に動くのはAnimatorControllerだけど、Animatorがそれを仲介している」ということです。 (「オブジェクト志向」や「継承」という概念を学ぶと納得出来るかもしれません) ■スクリプトで制御する AnimatorControllerをスクリプトで記述する機会があるとすれば「どんなアニメーションをするか切り替えたい時」です。 例えば「時には人間のように二足歩行をし、時には動物のように四足歩行をする(=各ステートで違うアニメーションを再生させる)」ようなキャラクターがいた場合、AnimatorControllerごと切り替えた方が管理が楽です(もちろん再生させるAnimationClipを切り替える方法もありますが)。 それぞれのAnimatorControllerで同じ変数を用意しておけば、Animator.SetTrigger()を行うだけで「現在セットされているAnimatorControllerのTriggerを切り替える」こととなり、AnimatorControllerの中身を考慮する必要が無くなります。
退会済みユーザー

退会済みユーザー

2017/01/21 06:57

ご回答ありがとうございます。 とても丁寧な解説で、自分の中で納得いってなかったことが理解できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問