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

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

草場代表
2020/11/07

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

Unity LearnのIntroduction to 3D Animation Systemsの勉強です。まずは、Course overview and core conceptsから。

1.1 Welcome to the course

1.概要

ゲームやその他のリアルタイム体験を向上させるためのアニメーションを作成するために使用できるUnityのアニメーションシステムの基礎の探求。”Real-time Animated Storytelling”では、プリビジュアライゼーションからポストエフェクトの処理までのプロセスが学べます。

2.このコースは誰向け?

Unityのアニメーションシステムに初めて触れる方で、エンジンの使用経験がある方を対象。コースの最後の学習プロジェクト「アニメーションスクリプト入門」を最大限に活用するには、C#スクリプトの経験が必要。

3.コースの構成

4つの学習プロジェクトがあります。
1. Unityの3Dアニメーションシステムの紹介
コースのUnityプロジェクトで提供される実践的な例で理解を固め、Unityの3Dアニメーションシステムの基礎となるコアコンセプトを確認することから始めます。
2. アセットを使用して作業する
アセットを使用して作成する方法について説明します。アニメーションクリップの作成と編集、リグの設定について。
3. アニメーター
アニメーションのブレンド、ステートマシン、アニメーションレイヤーを探求しながら、アニメーターについて学びます。この学習プロジェクトが終了する頃には、Unityの3Dアニメーションシステムの包括的な概要を理解することができます。
4. アニメーションスクリプトの紹介
この最後の学習プロジェクトでは、一般的なアニメーションスクリプトとヒューマノイドに特化したアニメーションスクリプトを紹介。

4.このコースを修了するには

このコースには2つのアプローチがあります。
・リニア(一つ一つ、一からやる方法)
各セクションを順を追って学習することで、Unity 3Dアニメーションシステムの総合的な理解を深めることができます。システムに慣れていない方には、このアプローチがお勧め。
・モジュラー(必要な部分だけ抜き出してやる方法)
もっと詳しく知りたいシステムの具体的な要素に焦点を当てるやり方。

5.コースUnityプロジェクトのダウンロード

このコースのために作成されたUnityプロジェクトでは、学習をサポートするためのエクササイズやサンプルがすべて提供されており、アセットストアからダウンロードできます。このコースのUnityプロジェクトをダウンロードするには、
1. Unity Hubを開き、ウィンドウの左側のメニューから「プロジェクト」タブを選択、新規作成の隣にあるドロップダウンボタンを選択し、プロジェクトを作成するUnityバージョンを選択(このコースは2019.4 LTSが必要)。
2. 3D テンプレートを選択、このプロジェクト名を「IntroAnimationSystems」設定、作成を選択、Unity Editorを開きます。
3. トップメニューで、ウィンドウ > アセットストアを選択、アセットストアウィンドウで、“Introduction to 3D Animation Systems Assets”を検索し、正しいアセットパッケージを選択。

4. [インポート]を選択し、画面の指示に従ってパッケージをダウンロード、ダウンロード後、インポートを選択。パッケージマネージャ依存性の警告ダイアログボックスが表示されたら、インストール/アップグレードを選択します。

5. トップメニューの「ファイル」>「保存」を選択して、プロジェクトのバージョンを保存します。

6.まとめ

このチュートリアルでは、「Introduction to Unity’s 3D Animation Systems」の構造と概要を確認しました。
次に、アニメーションデータから始めて、Unityでアニメーションを作成するための2つのコアコンセプトを探っていきます。

1.2 Core concepts: animation data

1.概要

Unityでアニメーションを作成するための2つのコアコンセプト、アニメーションデータとアニメーションブレンディングを探求します。この2つのコアコンセプトを理解すると、その知識をUnityのさまざまなアニメーション機能のすべてに応用し、3Dアニメーションシステム入門コースの残りの部分でさらに詳細に探求できるようになります。

2.始める前に

3Dアニメーションシステム入門Unityプロジェクトを、まだダウンロードしていない場合は、先にダウンロードする必要があります。プロジェクトをダウンロードしたら
1. Unityエディタでプロジェクトを開き、プロジェクト」ウィンドウの「Assets」 > 「1.2 – Core Concepts Animation Data」を選択。このチュートリアルに必要なアセットはすべてこのフォルダにあります。

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

アニメーションデータはアニメーションクリップと呼ばれるアセットとして保存されます。アニメーションクリップには、GameObjectのアニメーションを保存することができます。これは、キャラクターのジャンプや明滅する光のような比較的単純なものから、ゲーム内のカットシーンアニメーションのようなより複雑なアニメーションまであります。アニメーションクリップは、Unityのアニメーションシステムの基本的な構成要素です。非常に基本的なアニメーションよりも複雑なものを作るときに使用します。

4.アニメーションクリップ上のアニメーションデータの2つの部分

アニメーションクリップに保存されるデータは、値とバインディングの2つの部分で構成されています。
・値
アニメーションクリップの値は通常、アニメーションカーブで表現されますが、必ずしもそうとは限りません。アニメーションカーブには、アニメーションしているGameObjectの変化の仕方に関する情報が含まれています。アニメーションカーブは通常 float 値 (整数または 10 進数のいずれかの値) で、時間の経過とともに変化します。
・バインディング
アニメーションクリップのバインディングは、GameObjectやコンポーネントの特定のフィールドに値を接続する方法です。バインディングは2つの要素で構成されています。
1. 階層構造からGameObjectのTransformコンポーネントへのパス。
2. そのTransformコンポーネントから特定のフィールドへのパス

値とバインディングは一対一の関係にあります。つまり、各バインディングには値があり、各値にはバインディングがあります。1つのアニメーションクリップには、多くのバインディングと値のペアを持つことができます。

5.アニメーションクリップの例を開く

Unityでアニメーションクリップがどのように見えるでしょうか?アニメーションウィンドウでアニメーションクリップを表示したり編集するために、
1. トップメニューのウィンドウ > アニメーション > アニメーションを選択。アニメーションウィンドウはアニメーターウィンドウとは異なります。

2. アニメーションウィンドウのヘッダをクリックしてホールドし、シーンビューウィンドウヘッダのアセットストアタブの横にあるアニメーションウィンドウをドラッグ&ドロップしてドッキングさせます。

3. プロジェクトウィンドウで、[アセット]>[1.2 – Core Concepts Animation Data]に移動し、[Circle Animation Clip]を選択して、[アニメーション]ウィンドウで開きます。

6.アニメーションデータとアニメーションカーブを探る

アニメーションデータにいくつかの変更を加え、その変更がアニメーションにどのような影響を与えるかを確認。
その前に、アニメーションクリップに存在するデータの理解が必要です。このコースでは、すべての例のアニメーションはアニメーションカーブにデータを保持しています。サークルアニメーションのアニメーションカーブを確認するには、
1. アニメーションウィンドウの下部にある「Curve」タブを選択して、「曲線モード」に入ります。
2. Ctrl + A(Windows)を押して、すべてのアニメーションキーフレームを選択。アニメーションカーブは、キーフレームの集合体で構成されています。キーフレームは、値と時間のペアです。キーフレームは同じ値を持つことはできますが、同じ時間を持つことはできません。キーフレームの値の時間的な変化がアニメーションカーブを定義します。
3.Fキーを押して、アニメーションウィンドウのカーブセクションでキーフレームを中央に配置します。

4. Positionプロパティの左側の折り返しを選択して、そのPosition.xとPosition.yのデータを確認します。これらがバインディングです。

5.バインディングを選択して、アニメーションウィンドウの右側にある関連するアニメーションカーブを強調表示します。

7.アニメーションデータがどのように変化するかを確認する

アニメーションが再生されると、そのアニメーションクリップの現在時刻が変わります。任意の時間に、すべてのバインディングの値がチェックされ、それらのバインディングが対応するフィールドの値が設定されます。
例えば、サークルアニメーションクリップを考えてみましょう。時間が0:40(1秒目に40フレーム)のとき、Position.yの値は3です。つまり、アニメーションクリップが半秒再生されている場合、再生されたGameObjectのPosition.yの値が3になります。

8.まとめ

このチュートリアルまとめ。
アニメーションデータの性質と、アニメーションクリップにどのように保存されているかを検討
アニメーションクリップに保存されているデータを確認
アニメーションクリップのデータがアニメーションの結果とどのように関係しているかを確認

1.3 Core concepts: animation blending

1.概要

Unityでアニメーションを作成するための2つのコアコンセプトのうち、2つ目のコンセプトである「アニメーションのブレンド」について。この2つのコアコンセプトを理解すると、その知識をUnityのさまざまなアニメーション機能のすべてに応用が可能になります。

2.始める前に

3Dアニメーションシステム入門Unityプロジェクトの事前ダウンロード。プロジェクトウィンドウで、アセット > 1.3 – Core Concepts Animation Blending を選択。

3.アニメーションブレンディング入門

アニメーションデータでは、アニメーションデータの2つの部分(バインディングと値)が1つのアニメーションクリップに格納されていることを学びました。
複数のアニメーションクリップを同時に再生すると、Unityはそれらをブレンドします。ブレンドの結果がバインディングに適用されます。
アニメーションクリップをブレンドするために、各アニメーションには相対的な重みがあり、個々のアニメーションクリップが最終的なアニメーションにどの程度の影響を与えるかを計算するために使用されます。この計算方法の最も一般的なものは加重平均です。

4.サンプルアニメーションの重さを調整する

アニメーションのブレンドに重み付けがどのように適用されるかを理解するために、サンプルアニメーションの重みを調整します。CoreConcepts シーンを開きます。
1. プロジェクトウィンドウで、アセット(Assets) > 1.3 – Core Concepts Animation Blending > Scenes を選択、 CoreConcepts Scene をダブルクリックして読み込みます。

このシーンには、Cube GameObject が同時に動く 2 つのアニメーションクリップを持つアニメーションの例があります。これら 2 つのアニメーションクリップの重さを調整するスクリプトもあります。

アニメーションクリップの重さを調整は以下です。2つのアニメーションクリップの重さを調整します。
1. Cube GameObjectをクリックして選択。インスペクタのブレンドの例のコンポーネントは、円アニメーションのウェイトは1に、四角アニメーションのウェイトは0に設定されています。このSceneをプレイすると、ゲームビューではキューブが円を描くように移動します。

2. 再生ボタンを押すと再生モードになり、ゲームビューでアニメーションを再生します。
3. インスペクタで、円アニメーションクリップのウェイトを 0 に変更すると、正方形アニメーションクリップのウェイトが 1 に変更されます。また、円アニメーションから正方形アニメーションにウェイトが変更されると、ゲームビューで Cube GameObject が円ではなく正方形のパターンで動き出します。
次に、Animator Controller を使ってアニメーションのブレンドを制御する方法を探ります。

5.アニメーターコントローラーの役割

アニメーターコントローラーは、アニメーションクリップの再生を開始するタイミングや、他のアニメーションクリップとのブレンド方法を制御するためのものです。これは、特定のGameObject階層で再生されるすべてのアニメーションクリップを組み合わせたアセットで、アニメーションの再生を制御するためのロジックを割り当てます。
アニメーションクリップを再生するには、アニメーターコントローラーが参照している必要があります。それを参照するアニメーターコントローラーは、シーン内のアニメーターコンポーネントによっても参照されなければなりません。

6.アニメーターコントローラーを探る

Scene では、Cube GameObject に Animator コンポーネントがあります。この Animator コンポーネントは、CubeController Animator Controller を参照しています。


Animator コントローラを開くには、以下の手順に従います。
1. プロジェクトウィンドウで、[1.3 – Core Concepts Animation Blending] > [AnimatorControllers]を選択し、CubeController をダブルクリックします。

2. CubeController 内のオレンジ色の Blend Tree ノードをダブルクリック。Blend Tree が開き、Circle と Square Animation Clips の両方を参照していることがわかります。ブレンドツリーとは、複数のアニメーションクリップを組み合わせた状態のことです。ブレンドツリーについては3.4: Creating and Configuring Blend Treesで詳しく説明します。

ブレンドツリーは、階層で入力したウェイトがアニメーションクリップにどのように割り当てられ、どのようにブレンドされるかをコントロールします。
アニメーターコントローラーについて知っておくべき重要なことは、以下の通りです。
・これらは論理的なステートの集合体であり、1つ以上のアニメーションクリップが含まれている。
・アニメーターコントローラは、これらのステート間を移動し、現在再生されているステートのアニメーションクリップを評価する。
・ステートはトランジションによって連結されており、連結されたステートのアニメーションクリップをブレンドする。

7.アニメーターコントローラーの作成

自分でコントローラーを作ります。新しいアニメーターコントローラーを作成するには、
1. プロジェクトウィンドウで、アセット > 1.3 – コアコンセプトアニメーションブレンド > AnimatorControllers を選択します。
2. 作成 > アニメーターコントローラーを選択します。

3. 新しい Animator ControllerにExampleController という名前を付けると、自動的にアニメーターウィンドウが開きます。新しいアニメーターコントローラーにはデフォルトのノードがありますが、ステートはまだありません。これは、現在、ExampleController はアニメーションクリップを再生することができないことを意味します。

8.ExampleControllerにアニメーションクリップを追加する

新しいアニメーションコントローラでアニメーションを再生するには、まずアニメーションクリップを追加する必要があります。これを行うには、
1. プロジェクトウィンドウで、「1.3 – Core Concepts Animation Blending> AnimationClips」を選択。
2.プロジェクトウィンドウのサークルアニメーションクリップをアニメーターウィンドウのグリッド背景にドラッグ&ドロップ。同様に、スクエアアニメーションクリップをアニメーターウィンドウのグリッド背景にドラッグ&ドロップ。

これでExampleControllerに2つのノードが作成され、これらのノードはアニメーションステートで、アニメーターコントローラに追加したアニメーションクリップが格納されています。円ノードはオレンジ色で、四角は灰色です。オレンジ色のノードはデフォルトの状態を表し、Entryというラベルのノードに接続されています。これは、シーンの開始時に最初に再生されます。

9.新規トランジションの作成

これでアニメーターコントローラを作成し、2つのアニメーションクリップを追加したので、あるステートから別のステートへのトランジションを作成する必要があります。今はデフォルトのノードなので、シーンが開始されるとすぐに、この Animator Controller を使用している GameObject 上でサークルアニメーションが再生されます。
しかし、現在の設定では、アニメーターコントローラーでスクエアアニメーションを再生する方法がありません。これは、アニメーションクリップを含む 2 つの状態間の遷移がないためです。
多くのアニメーションツールやシステムと同様に、トランジションは2つのアニメーションをブレンドするために使用されます。トランジションは、最初のアニメーションと最後のアニメーションをブレンドします。
新しいトランジションを作成するには
1. サークルステートを右クリックしてコンテキストメニューを表示し、Make Transition(遷移を作成)を選択。正方形の状態を選択して、そのアニメーションにトランジションを割り当てます。

これで、サークル状態からスクエア状態への矢印が表示されるようになりました。アニメーションの実行がサークルアニメーションクリップの再生からスクエアアニメーションクリップへと移動できることを意味しています。

10.トランジションの設定

円と四角のアニメーションとトランジションをリンクしたので、アニメーションの中でいつトランジションが発生するかを設定する必要があります。そのためには、いくつかの設定を変更する必要があります。
まずは終了時間を設定するには、
1. アニメーターウィンドウで、作成したトランジションを選択、インスペクタにその設定が表示されます。

2. 設定フォールドアウトを展開。デフォルトでは、終了時間が0.75に設定されています。これは、サークル状態のアニメーションクリップが75%再生された時点でトランジションが開始されることを意味します。トランジションが開始される前に少なくとも1回転した方が満足度が高いと予測されるので、1以上の値に変更する必要があります。
3.終了時間を1.5に変更します。これで、サークルアニメーションクリップは、トランジションが始まる前に1回転半再生されます。

次にトランジションのタイミング。
ブレンドするアニメーションをスムーズに行うためには、円と四角のアニメーションクリップのウェイトを手動で調整したときのように、アニメーションが位相を合わせていることが重要です。
トランジションが開始されると、トランジション先のステートでアニメーションクリップの再生が開始されます。この場合、円のアニメーションクリップは、トランジションの開始時に途中まで再生されています。アニメーションクリップが同位相になるように、四角いアニメーションクリップもその中間地点から再生を開始します。トランジションのタイミングを設定するには
1. 遷移のオフセットを0.5に変更します。これにより、正方形のアニメーションクリップがその中間点から始まります。
2. トランジションの時間を2に変更します。 これにより、トランジションがより緩やかにブレンドされます。これで、トランジションが完了するまでに2秒かかります。

11.調整したアニメーションを見直す

最終結果を表示する前に、Cube GameObject が先ほど作成した Animator Controller を再生していることを確認する必要があります。これを行うには、
1. 階層構造で、Cube GameObject を選択。プロジェクトウィンドウで、1.3 – Core Concepts Animation Blending > AnimatorControllersにあることを確認。
2. インスペクタで、Animator コンポーネントの Controller プロパティに ExampleController をドラッグ&ドロップ。Blending Example コンポーネントで、コンテキストメニューをクリックし、コンポーネントの削除を選択。
3. 再生ボタンを押して、新しいアニメーターコントローラがゲームビューで動作しているのを確認します。

 

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