Version: 2020.2
言語: 日本語
アニメーション遷移
Playable API

アニメーションに関する FAQ

一般的な質問

Mecanim (メカニム)とは

Mecanim は Unity に統合されたアニメーションソフトウェアの名称です。Unity 4.x シリーズの早い段階から、Mecanim は特にヒト型キャラクターのアニメーション製作に主眼を置いており、そのための特徴的な機能を数多く備えています。Mecanim は Unity の旧アニメーションシステム(現在は legacy と呼ばれる)とは別物です。

Mecanim にはヒューマノイドアニメーションのリターゲッティング、マッスルコントロール、そしてステートマシーンシステムなどが組み込まれています。“Mecanim”という名称はフランス語で“Guy”を意味する“Mec”から来ています。Mecamin でヒューマノイドキャラクターしかオペレートできなかった頃は、非人間型キャラクターやその他キーフレームベースのアニメーションが必要なゲームオブジェクトをアニメーションさせるために、旧アニメーションシステムが使われていました。

しかしそれ以降も、我々は、プロジェクトのあらゆる場面でのアニメーション製作に役立つような Mecanim の開発、拡張を続け、残りのアニメーションシステムとの統合を図ってきました。ここで “Mecanim” の不明瞭な定義は終わりを告げ、新たなアニメーションシステムが始まります。このような理由から、コミュニティやリファレンスドキュメントではまだ “Mecanim” の名称を目にしますが、現在では、それは単にメインのアニメーションシステムを意味しています。

Animation コンポーネントと Animator コンポーネントの違いは?

Animation コンポーネントは 旧アニメーションシステム で使用していた過去の仕組みです。後方互換性のために残してあるだけなので、新しいプロジェクトでは非推奨です。代わりに、最新の Animator コンポーネントを使ってください。

左: 旧システムの Animation コンポーネント。右: 現システムの Animator コンポーネント
左: 旧システムの “Animation” コンポーネント。右: 現システムの “Animator” コンポーネント

Animation ウィンドウと Animator ウィンドウの違いは?

Animation ウィンドウ では、Unity上でアニメーションクリップを作成・編集することができます。ゲームオブジェクトの位置、マテリアルカラー、ライトの明るさ、サウンドのボリュームなど、インスペクター上で編集可能なあらゆるプロパティをアニメーションさせる事ができ、スクリプトから任意の値に変更することも可能です。

Animator ウィンドウ では、state machine と呼ばれるフローチャートに似たシステムを使い、アニメーションクリップ全体を整理・構成することができます。

この二つのウィンドウは新しいアニメーションシステムの一環であり、古いアニメーションシステムのものではありません。

つまり、Animation コンポーネントは古く、Animation ウィンドウは現在のもの、という事ですか?

そのとおりです。

旧アニメーションシステムを使用してプレイヤーのアニメーションを行っています。Mecanim を使用するべきでしょうか?

一般的には、使うべきでしょう。legacy アニメーションシステムは、過去の古いプロジェクトとの後方互換性のためだけに存在しており、現在のアニメーションシステムと比較すると、非常に限られた機能しかありません。ただ、過去のプロジェクトを古いシステムで作成する場合のみ、legacy アニメーションシステムの使用を検討するのもよいでしょう。

インポート

なぜインポートしたメッシュにアニメーターコンポーネントがついているのでしょうか?

Unity はインポートしたファイルのタイムラインにアニメーションが存在することを検出すると、インポート時にアニメーションコンポーネントを付加します。この設定は、アセットのインポート設定の Rig タブの下にある“Animation Type”を none にすることで変更できます。必要であれば、一度に複数ファイルの設定を変更することも可能です。

レイヤー

レイヤーの順番は何かに影響しますか?

はい。レイヤーは一番上から下まで順に評価されます。Override としてセットされたレイヤーは常に前にあるレイヤーを上書きします(マスクがあれば、そのマスクにもとづきます)。

Base Layer のウェイトは常に 1 とすべきでしょうか、あるいは別のレイヤーが実行されているときは 0 に設定すべきでしょうか。

Base Layer のウェイトは常に1で、オーバーライド レイヤーは完全に Base Layer を上書きします。

コントローラーから変数の値を文字列以外の形式で取得する方法はありますか?

整数型を使用してステートおよびパラメーターを識別することができます。Animator.StringToHash 関数を使用して整数型の識別子を取得してください。例えば:

runState = Animator.StringToHash("Base Layer.Run");
animator.SetBool(runState, false);

同期するレイヤーと同期元のレイヤーの長さが異なる場合、どうなりますか?

レイヤーが異なる長さを持つ場合は、同期されません。Timing オプションを有効にして、現在のレイヤーのステートのタイミングをソースレイヤーのタイミングに合わせます。

アバターマスク

LeftFoot、RightFoot、LeftHand、RightHand 以外の AvatarIKGoals を作成する方法はありますか?

はい、膝と肘は IK をサポートしています。

どのボーンがアバターマスクの一部とするか定義する方法はありますでしょうか。

Generic のクリップでは、どのトランスフォームアニメーションをインポートするかを設定できます。 Humanoid のクリップでは、人型部分のトランスフォームは常にインポートされ、追加のトランスフォームを設定する事ができます。

アニメーションカーブとイベント

カーブつきのアニメーションはアニメーションなしの場合とどのようにブレンドできますか?

カーブつきのアニメーションと、カーブなしのアニメーションがある場合、Unity はカーブに接続されたパラメーターのデフォルト値を使用してブレンドを行います。 パラメーターに対してデフォルト値を設定することができ、あるステート(状態)に置いてカーブパラメーターと 1 つも持っていないものをブレンドする時には、カーブの値とデフォルトのパラメーター値でブレンドされます。 パラメーターのデフォルト値を設定するには、LiveLink のないアニメーターツールウィンドウにその値を設定します。

アニメーション遷移
Playable API