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

代表技術通信~Unityに舞い戻りでV⑬

草場代表
2020/11/14

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

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

2.7 Creating and configuring Animation Events

1.概要

アニメーションイベントは、スクリプト内のメソッドが呼び出されるアニメーションクリップ内のポイントです。
アニメーションイベントとコンテキストの関係について
コンテキストの有無に関わらず、アニメーションイベントを作成して設定する
について学びます。

2.始める前に

3Dアニメーションシステム入門Unityプロジェクトをダウンロードしておいてください。プロジェクトをダウンロードしたらUnityエディタでプロジェクトを開き、プロジェクトウィンドウで、Assets > 2.7 – Creating Animation Events > Scenes と進み、AnimationEventsWithContext をダブルクリックして Scene を開きます。ヒエラルキー(階層構造)で、Ball GameObject を選択します。トップメニューの「ウィンドウ」>「アニメーション」>「アニメーション」を選択し、アニメーションウィンドウを開き、アセットストアタブの横にあるアニメーションウィンドウをドッキングします。

3.アニメーションイベントを使ったメソッドの呼び出し

アニメーションイベントは、MonoBehaviourスクリプト内のメソッドを呼び出します。アニメーションイベントがスクリプトからメソッドを呼び出すためには、アニメーションクリップが再生されているアニメーターコンポーネントと同じGameObjectにスクリプトがアタッチされている必要があります。
アニメーションイベントは、以下の両方が真の場合に呼び出され、そのメソッドを呼び出します。
前のフレームのアニメーションクリップの正規化時間が、アニメーションイベントの正規化時間よりも前である
現在のフレームのアニメーションクリップの正規化時間は、アニメーションイベントの正規化時間の後になる

このメソッドはパブリックである必要はなく、オプションで単一のパラメータを持つことができます。このパラメータには、float、int、文字列、オブジェクトのいずれかを指定します。

4.アニメーションイベントとコンテキストの関係

2.2. アニメーションクリップの編集で説明したように、アニメーションクリップは、再生するGameObjectのコンテキストを持っているかどうかによって、さまざまな方法で編集することができます。アニメーションクリップにアニメーションイベントを追加する場合も同様です。
アニメーションクリップにアニメーションイベントを追加する場合も、再生するGameObjectのコンテキストを持っているかどうかに関わらず、アニメーションイベントの作成方法が異なります。どのように作成されるかに関わらず、アニメーションイベントには2つの情報が必要です。
アニメーションイベントがメソッドを呼び出すタイミング
呼び出すべきメソッドの名前

また、オプションで、呼び出されるメソッドに渡すパラメータを含めることもできます。

5.コンテキストでアニメーションイベントを作成する

ここでは、アニメーションイベントを作成する際に、どのようにアニメーションイベントを作成するのかを見てみましょう。アニメーションウィンドウでは、現在、バウンスアニメーションクリップが開いていて、それが再生されるGameObjectのコンテキストが表示されています。

Ball GameObjectには、子GameObjectにParticle Systemコンポーネントがあります。このコンポーネントを使用して、ボールが初めて跳ね返るときに、アニメーションの中にダストパフを表示させることができます。
1. アニメーションウィンドウで、曲線ボタンを選択して、曲線モードに切り替えます。

2. Ctrl + A(Windows)を押して、アニメーションのすべてのキーフレームを選択します。
3. Fボタンを押して、選択したキーフレームにフォーカスします。

緑色の曲線は、ボールの位置の垂直部分です。これは、アニメーションクリップが10フレームインしたときに初めてボールが跳ね返ることを示しています。
4. 10フレームで最初のバウンスを超えるようにプレイヘッドを移動させます。
5. イベントの追加を選択して、新しいアニメーションイベントを作成します。

6.コンテキストでアニメーションイベントを設定する

次に、先ほど作成したアニメーションイベントを設定してみましょう。
1. インスペクタで、呼び出される可能性のある様々な関数のリストがドロップダウンで表示されます。リストからPlayParticlesを選択します。

アニメイベントが終了しました

 

2. メインツールバーで、Playを押してPlay Modeに入り、Sceneでアニメーションをテストします。

3. 終了したら、もう一度再生ボタンを押して再生モードを終了します。

※注意
PlayParticleにしないと、Playにしても、以下の画面になります。たぶん。

復習します。
アニメーションイベントが必要とする情報と照らし合わせて、このプロセスを見直してみましょう。
メソッドを呼び出す時間:特定のキーフレームで新しいアニメーションイベントを作成したときに設定します。
呼び出すべきメソッドの名前:ドロップダウンからPlayParticlesメソッドを選択して設定します。
呼び出されるメソッドにはパラメータがないので、この場合はオプションのパラメータは不要です。

7.コンテキストなしでアニメーションイベントを作成する

次に、アニメーションイベントが使用できるメソッドのコンテキストがなくてもアニメーションイベントが作成できる場合と、その作成方法を探ってみましょう。
アニメーションイベントは、2つの場所でコンテキストなしで作成することができます。
アニメーションウィンドウで、アニメーションクリップがアセットとして表示されているときに、先ほどと同様の処理を行います。
アニメーションインポーターでは、アニメーションクリップにアニメーションイベントを追加するオプションがあります。

どちらの場合も、アニメーションクリップが再生されるGameObjectのコンテキストを持っていない場合であることを覚えておいてください。
コンテキストなしのアニメーションイベントを作成するには

1. プロジェクトウィンドウで、2.7 – アニメーションイベントの作成 > モデルを選択します。
2. ボールモデルを選択します。

3. モデルインポーターのインスペクタでアニメーションタブを選択します。
4. Events foldoutまでスクロールダウンして展開します。

5. プレビューペインを使ってアニメーションをスクラブし、ボールが最初にバウンドするフレームを探します。これは、先ほどと同じように、アニメーションが重複しているため、10フレーム目になります。
6. イベントの追加ボタンを選択して、コンテキストなしで新しいアニメーションイベントを作成します。

8.コンテキストなしでアニメーションイベントを設定する

次に、アニメーションイベントを設定してみましょう。Functionフィールドに “PlayParticles “という名前を入力します。この名前は、呼び出されるメソッドの名前と正確に一致している必要があります。

復習します。
アニメーションイベントが必要とする情報と照らし合わせて、このプロセスを見直してみましょう。
メソッドを呼び出す時間:特定のキーフレームで新しいアニメーションイベントを作成したときに設定します。
呼び出すべきメソッドの名前:これは、関数フィールドにPlayParticlesを読み取るように設定したものです。

以前のように、呼び出されるメソッドにはパラメータがないので、オプションのパラメータは不要です。

9.まとめ

アニメーションイベントとコンテキストの関係を説明する
コンテキストの有無に関わらずアニメーションイベントの作成と設定

を行いました。
「2.8 Generic Rigs の設定」では、モデルのインポートプロセスの重要な部分を探ります。リグは、インポートするモデルの構造を定義する方法であり、アニメーションの再生方法を定義するために使用されます。

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