未来を創る、テックコミュニティー

代表技術通信~Unityに舞い戻りでVR⑦

草場代表
2020/11/08

こんばんは。代表の草場です。

Unity LearnのIntroduction to 3D Animation Systemsの勉強です。Working with Assets です。

2.1 The Animation window: features and settings

1.概要

1.2: Animation systems core concepts: Animation dataでは、アニメーションデータがバインディングと値としてどのように存在するかを探りました。
今回は以下のことを学びます。
アニメーションウィンドウでバインディングと値がどのように表現されるか?
アニメーションウィンドウでアニメーションクリップを表示するための基本

2.始める前に

3Dアニメーションシステム入門Unityプロジェクトを事前にダウンロード必要です。
1. Unityエディタでプロジェクトを開きます。
2. プロジェクトウィンドウの「アセット」>「2.1 アニメーションウィンドウの機能と設定」を選択します。

3.アニメーションクリップのデータのまとめ

Animation Clipsに保存されているアニメーションデータは、バインディングと値の2つの部分で構成されています。
バインディングは、アニメーションの再生中にGameObjectやComponentのどのフィールドを変更するかを示します。
は、任意のタイミングでフィールドを変更する必要があることを示しています。これらの値は、時間の経過とともに変化し、曲線として表現される小数です。
アニメーションウィンドウ(アニメーターウィンドウとは別)には、アニメーションクリップに関連付けられたバインディングと値が表示されます。アニメーションウィンドウを使って、アニメーションクリップのバインディングと値の両方を編集することができます。

4.アニメーションの例を見てみよう

Core Concepts チュートリアルの円と四角の例とは少し異なるアニメーションの例、街灯のアニメーションを見てみましょう。このアニメーションを開くには
1. Project ウィンドウで、Assets > 2.1 – Animation Window Features and Settings > Scenes と進み、StreetLampExample Scene をダブルクリックして開きます。
2. 再生ボタンを押して再生モードに入り、アニメーションが動作することを確認します。明滅している街灯が表示されているはずです。もう一度再生ボタンを押して再生モードを終了します。
4. プロジェクトウィンドウで、2.1 – アニメーションウィンドウの機能と設定 > AnimationClips と進み、LightFlicker Animation Clip をダブルクリックして、アニメーションウィンドウで開きます。
5. アニメーションウィンドウがカーブモードに設定されていることを確認。

5.インポートしたアニメーションクリップの編集

StreetLampのアニメーション用のアニメーションクリップはUnityで直接作成したものですが、他のソフトで作成したアニメーションクリップを使ってモデルをインポートすることもできます。モデルの一部としてインポートされたアニメーションクリップは読み込み専用で、編集することはできません。
モデルの一部としてインポートされたアニメーションクリップを編集したい場合は、アニメーションクリップのアセットを複製して、この新しいアニメーションクリップを編集することができます。複製したアニメーションクリップはモデルに関連付けられないので、モデルのインポート設定を変更してもアニメーションクリップは変わりません。
インポートしたHumanoidCrouchモデルのアニメーションクリップを複製して編集してみましょう。

1. プロジェクトウィンドウで、Assets > 2.1 – Animation Window Features and Settings > AnimationClipsフォルダに移動し、HumanoidCrouchモデルを選択。
2. HumanoidCrouchモデルのアイコンの左側にある折り畳み矢印をクリックして、サブアセットを表示。このモデルの下には、いくつかのアニメーションクリップがネストしています。

3. アニメーションウィンドウでアニメーションクリップを選択して表示。
4. Ctrl + D (Windows)を押して、アニメーションクリップを複製。これで、新しいアニメーションクリップのプロパティを編集することができますが、HumanoidCrouchモデルに関連付けられていないことを覚えておいてください。

読み取り専用のアニメーションクリップを表示する
Unityでは、読み取り専用のプロパティを非表示にすることができます。これらのプロパティを非表示にするには、
1. アニメーションウィンドウで、タイムラインの横にあるコンテキストメニューを選択します(隣接する2つのコンテキストメニューのうち、下の方)。

2. 読み取り専用プロパティを表示または非表示にします。

6.アニメーションクリップのコンテキスト

アニメーションウィンドウでアニメーションクリップを表示するには、アセットとして表示する方法とコンテキストとして表示する方法の2つの方法があります。どちらの方法を選択するかによって、アニメーションクリップの編集方法が変わります。

・アニメーションクリップをアセットとして表示する
アニメーションクリップをアセットとして表示すると、アニメーションウィンドウには再生に使用されるGameObjectのコンテキストが表示されません。つまり、アニメーションクリップにアニメーションカーブを追加することはできません。アニメーションクリップをアセットとして表示するには
プロジェクトウィンドウでアニメーションクリップを選択して開きます。

・アニメーションクリップをコンテキストで表示する
GameObject Hierarchyでアニメーションクリップを表示すると、アニメーションウィンドウにはコンテキストが表示されます。つまり、アニメーションカーブを追加することができます。アニメーションクリップをコンテキストで表示するには、以下の手順に従います。
ヒエラルキー(階層構造)で、アニメーションクリップを含むアニメーターコントローラを持つ GameObject を選択します。アニメーターコントローラーが参照しているクリップがアニメーションウィンドウに表示され、コンテキストを必要とする設定にアクセスできるようになります。
このコンテキストの考え方は、アニメーションウィンドウの機能にも影響を与えます。アニメーションウィンドウのさまざまな機能や設定、ツールを見ていくうちに、コンテキストが各要素にどのような影響を与えるのか、またどのように影響するのかを知ることができるでしょう。

7.アニメーションクリップのコンテキスト 街灯の例

StreetLampの例を使って、Unity Editorでコンテキストの概念を探ります。

LightFlickerをアセットとして表示する
LightFlickerアニメーションクリップをアセットとして表示するには、
プロジェクトウィンドウで、アセット > 2.1 – アニメーションウィンドウの機能と設定 > AnimationClipsと進み、LightFlickerアニメーションクリップを選択してアニメーションウィンドウで開きます。プロパティの追加ボタンが無効になっているので、既存のアニメーションカーブを編集することができません。これは、GameObjectのコンテキストなしでアニメーションクリップを表示しているためです。

LightFlickerをコンテキストで見る
GameObjectのコンテキストでLightFlickerアニメーションクリップを表示するには、
階層構造で、StreetLamp GameObjectを選択。アニメーションウィンドウに LightFlicker アニメーションクリップが表示されます。
アニメーションクリップを編集したい場合は、GameObjectのプロパティにアクセスできるようになりました。これは、アニメーションウィンドウがアニメーションクリップのコンテキストを検出したためです。これでプロパティの追加ボタンが有効になりました。

8.アニメーションウィンドウのモードを確認する

アニメーションウィンドウの機能を詳しく見ていきます。

アニメーションウィンドウの概要
アニメーションクリップは、値とバインディングの2つの部分で構成されています。アニメーションウィンドウは主に2つのエリアに分かれていて、それぞれのアニメーションクリップの各部分に対応しています。
Curvesをクリック

キーフレーム
アニメーションクリップの各バインディングには、対応する値を構成するキーフレームのコレクションがあります。これらのキーフレームには、特定の時間におけるアニメーションカーブの値や、その間の値の補間方法に関する情報が保持されています。

ドープシートとカーブモード(曲線モード)
アニメーションクリップの値は、アニメーションウィンドウで2つの異なるモード、ドープシートモードと曲線モード、で観ることが出来ます。
ドープシートモードは、キーフレームのみが表示される凝縮されたビューです。キーフレームがどのようにレイアウトされているかを見たい場合や、キーフレームがfloat値ではなくオブジェクト参照を表している場合に便利です。これは、キーフレームごとに異なるスプライトが入れ替わる2Dアニメーションでよく見られます。
曲線モードでは、すべてのバインディングまたは選択されたものだけのキーフレームの値とその補間を表示します。
このコースはUnityの3Dアニメーションシステムに焦点を当てていますが、内容の大部分はUnityの2Dアニメーションにも適用されます。

モードを変更する
ここまでのチュートリアルでは、アニメーションクリップをカーブモードで表示していました。アニメーションウィンドウをドープシートモードに変更してみましょう。
1. アニメーションウィンドウの左下にある「ドープシート」タブを選択して、ドープシートモードに切り替え。

2. 曲線タブを選択して、曲線モードに戻します。

速度を変更する
ドープシートモードでも曲線モードでも、アニメーションウィンドウの上部には常にタイムラインが表示されています。このタイムラインには、秒:フレームの形式で時間が表示されています。例えば、1:15 はアニメーションクリップの開始から 15 フレームと 1 秒を意味します。アニメーションの速度を変更するには、1秒あたりのフレーム数を変更することができます。これを行うには、
1. タイムラインの横にあるコンテキストメニューで、「フレーム」を選択。

2. 同じコンテキストメニューをもう一度開き、「サンプルレートを表示」を選択。アニメーションウィンドウで手動でフレーム数を設定することが可能。または、コンテキストメニューを使用して Set Sample Rate を選択し、利用可能なオプションの 1 つを選択して速度を変更することも可能。

9.アニメーションウィンドウのツールバーを見直す

アニメーションウィンドウの左側、バインディングの上には、アニメーションクリップのデータを表示したり編集したりするのに役立つボタンや設定がいくつかあります。

アニメーションクリップをアセットとして表示している場合、これらのボタンの一部は無効になっています。ヒエラルキー(階層構造)で該当するGameObjectを選択すると、アニメーションクリップをコンテキストで表示し、これらのツールにアクセスすることができます。

プレビューモード
最初のボタンはプレビューボタンです。プレビューモードでは、タイムラインとプレビューされているインスペクタのプロパティの両方が青く着色されます。

記録モード
アニメーションウィンドウのツールバーの次のボタンは、録画ボタンです。記録モードでは、タイムラインとプレビュー中のインスペクタのプロパティの両方が赤く着色されます。プレビューモードと同様に、記録モードを有効にすると、アニメーションクリップの値が一時的にGameObjectに設定されます。重要な違いは、このモードを有効にしている間に行ったプロパティの変更がアニメーションクリップに記録されることです。

このモードで変更して保存できる内容には、以下のようなものがあります。
アニメーションクリップへの新しいバインディングの追加
アニメーションカーブにキーフレームを追加する
キーフレームの値を設定する

つまり、GameObjectのプロパティを変更することができ、新しい値、バインディング、キーフレームはアニメーションクリップに記録されます。

タイムラインプレイヘッド
タイムラインのプレイヘッドは、プレビューされているタイムライン上の正確なポイントを示しています。ツールバーの次の5つのボタンはTimelineのプレイヘッドの位置を設定するためのものです。

再生ボタン
ここで再生ボタンを使用できるのは、アニメーションクリップをコンテキストで表示している場合のみです。このボタンを押すと、
プレビューモードが有効になります。
アニメーションはプレイヘッドの現在時刻から再生を開始します。
シーンビューでアニメーションを見ることができます。

最初、前、次、最後のボタン
再生の両側にあるボタンは、アニメーションクリップをアセットとして表示している場合でも、コンテキストとして表示している場合でも使用できます。これらのボタンを使用して、キーフレーム間でプレイヘッドを移動することができます。これらのボタンは、プレイヘッドをそれぞれ最初、前、次、最後のキーフレームに移動します。

現在のフレーム
最後の5つのボタンの右側には、プレイヘッドの位置を設定するためにも使用できる数値フィールドがあります。この数字は現在のフレームの位置を表しています。この数字を変えるとプレイヘッドの位置が変わります。
アニメーションクリップがコンテキストで表示されているときに、プレイヘッド位置ボタンのいずれかを選択したり、数値フィールドを変更したりすると、プレビューモードが有効になります。

10.アニメーションクリップの選択・作成

アニメーションウィンドウの設定とボタンの2列目には、現在表示しているアニメーションクリップの名前が表示されています。アニメーションクリップをコンテキストで表示しているときに、別のアニメーションクリップを選択したり、新しいアニメーションクリップを作成したりするには、次の手順に従います。

1. アニメーションウィンドウでアニメーションクリップ名を選択し、ドロップダウン選択メニューを開きます。
2. アニメーターコントローラで現在使用されているアニメーションクリップを選択するか、新規アニメーションクリップの作成 を選択して新しいアニメーションクリップを作成します。

新しいアニメーションクリップを作成すると、現在使用しているアニメーターコントローラーに自動的に追加され、現在のGameObjectのコンテキストに配置されます。

11.アニメーションクリップのアニメーションカーブをフィルタリングする

原則として、複雑なアニメーションクリップであればあるほど、アニメーションカーブの数は多くなります。アニメーションクリップの中にたくさんのアニメーションカーブがある場合は、フィルタリングして表示することができると便利です。選択したGameObjectに関連するアニメーションカーブだけを表示するようにフィルタリングするには、次のようにします。
1. ヒエラルキー(階層構造)で、関連するアニメーションカーブを表示したい GameObject を選択します。
2. アニメーションウィンドウで、選択によるフィルタをクリックします、青くなっているところ。

例えば、
キャラクターアニメーションを見ているが、特に手のアニメーションに注目したい場合にこのフィルター機能を使用することができます。手の変形に関連するアニメーションカーブだけを表示するには、次のようにします。
1. 階層構造で、ハンドの子 GameObject を選択します。
2. アニメーションウィンドウで、「選択によるフィルタ」ボタンをクリックします。

12.キーフレームとアニメーションイベントの追加

最後の2つのボタンでは、キーフレームとアニメーションイベントを追加します。

キーフレームの追加
キーフレームの追加ボタンは、プレイヘッドの現在の時刻に選択されているすべてのアニメーションカーブにキーフレームを追加します。アニメーションカーブを選択していない状態で「キーフレームの追加」をクリックすると、選択したGameObjectに関連付けられたすべてのアニメーションカーブにキーフレームが追加されます。

イベントの追加
イベント追加ボタンは、新しいアニメーションイベントを追加します。アニメーションクリップをアセットとして表示している場合でも、コンテキストとして表示している場合でも動作しますが、アニメーションイベントの設定方法に影響します。アニメーションイベントについては、2.7: アニメーションイベントの作成と設定を参照してください。

13.まとめ

アニメーションウィンドウのさまざまな機能について説明しました。以下のことを学びました。
インポートしたアニメーションクリップを複製して編集すること
アニメーションクリップをアセットとして、またはコンテキストとして表示する際に、アニメーションウィンドウで利用できるさまざまな機能
ドープシートとカーブスモードの違い

この記事を書いた人
草場代表
エディター