レッスン 7

目次

コンポーネントを使ったコールバック(Callbacks using Components)

音楽は、サウンドスケープにおいて、中心的で常時アクティブな要素であることが多いので、コールバック使用の恰好の候補です。このレッスンではコールバックを音楽にインテグレートし、音楽のテーマにグラフィック側が反応するようにします。音楽的な機能からノティフィケーションを受け取って、ゲームのエレメントをコールし、それらが音楽に反応して動いているかのように、例えば音楽のリズムに合わせて木がダンスしているかのように、できます。

Wwise Adventure Gameのリージョンの音楽には6つの異なるテーマがあり、すべて、テンポやキーが同じです。

AkEventやAkAmbientのコンポーネントを使えば、コールバックの設定は、比較的簡単にできます。どちらのコンポーネントにもUse Callbacksというプロパティがあり、これを設定すれば、コールバック作成に必要な情報を設定できるのです。

コールバックをするには、2種類の情報を定義しておきます。最初に Callback Function をアサインし、このファンクションがどの Game Object にあるのかを決めます。次に、このCallback Functionをいつコールするのかを指定する必要がありますが、それには Callback Flags (スクリプトでは Callback Type と呼ばれることも)を、1つ以上選択します。この2種類の情報を、イベントをコールするときに一緒に送ると、Callback Typeが実際に起きたときに、Callback Functionプロパティで指定したファンクションがコールされます。これから、Wwise Adventure Gameのミュージックのテンポに基づいて、木の大きさを変化させてみます。まず、Music_RegionのEventをAkEventコンポーネントからポストし、次に、木にRhythmActionsスクリプトを追加します。

最後に、コールバックで、RhythmActionsスクリプトをMusic_RegionのAkEventからコールします。

  1. Unityのメニューで、 Audiokinetic > Certification > 301 > Lesson 7 を選択し、 Callbacks using Components を選択します。

    Music_RegionのEventをポストするAkEventは、ゲームオブジェクト単位でコントロールされるものではなく、音楽自体にポジションはないので、どのゲームオブジェクトにでも追加できます。簡単に使えるように、AkEventをWwiseゲームオブジェクトに追加してください。

  2. Hierarchyで Wwise ゲームオブジェクトを選択します。

  3. Inspectorで Add Component をクリックし、 AkEvent を検索して選択します。

  4. Event Nameプロパティで Events > Music > General を展開し、 Music_Region を選択します。

    Trigger Onプロパティのデフォルト設定があるので、これで、ゲーム初期化のときに音楽をポストする準備は終わりです。コールバックを使うには、まず、コールバックを送る対象のファンクションを(該当のゲームオブジェクトと共に)、宣言します。そこで、まずTraining Areaにあるtree(木)に、RhythmActionsスクリプトを追加するところから始めます。

  5. Hierarchyで TrainingArea_Tree_01 ゲームオブジェクトを選択します。

  6. Inspectorで Add Component をクリックし、 RhythmActionsスクリプトを探して選択します。

    RhythmActionsスクリプトをゲームオブジェクトに追加すると、そのゲームオブジェクトの倍率を変更できます。Modificationsクラスを使い、ゲームオブジェクトの倍率を、X軸、Y軸、Z軸に沿って拡大縮小できます。

    このスライダー値を自由に変更して構いませんが、デフォルト値を使えば、木が呼吸する様子をはっきりと出せるはずです。RhythmActionsスクリプトに'PushActions'というpublicのファンクションを作成してあります。

    このファンクションは、Modificationsクラスのスライダー値に基づいてゲームオブジェクトの倍率を変更するものです。Modificationsプロパティの設定を徐々にTransformコンポーネントに変換(「プッシュ」)し、また元に戻してくれます。WwiseゲームオブジェクトのAkEventコンポーネントに戻り、TrainingArea_Tree_01ゲームオブジェクトをコールバックの参照先として追加します。

  7. Hierarchyで Wwise ゲームオブジェクトを選択してから、 AkEvent を展開し、 Use Callbacks を有効にします。

    コールバックでPushActionsファンクションをトリガーするには、スクリプトを追加したゲームオブジェクトを追加し、ファンクション名を正確に書く必要があります。

  8. TrainingArea_Tree_01 ゲームオブジェクトを、HierarchyからAkEventの Game Object プロパティまでドラッグします。

  9. Callback Functionプロパティに、 PushActions と入力します。

    最後に、Callback Flagを追加する必要があります。これらのフラグの特徴の1つとして、再生中のMusic SegmentのBeat、Bar、Entry、Exitなど、Music Segment内のマーカーノーティフィケーションを参照することができます。MusicSyncUserCueとMarker以外の通知(ノーティフィケーション)は、Wwiseで何かを準備する必要はありません。

    試しにMusicSyncBarという、対象Eventが途中でBarに到達するたびにコールされる通知機能(ノティフィケーション)を使います。

    [ヒント]

    各Callback Flagについての詳細は、 Wwise SDK Documentation を確認してください。

  10. Callback Flags のproperty drawerで、 MusicSyncBar だけを選択します。

    以上です。ゲームをプレイして、木々が動き出すのを見てください。

  11. Playモードに入り 、PlayerをVillage方面にある TrainingArea_Tree_01 のゲームオブジェクトまで近づけます。

    木が呼吸しているかのように、ゆっくりと膨らんだり、へこんだりします。RhythmActionsスクリプトをMusic_RegionのEventに接続することで、木が音楽のリズムに合わせて大きくなり、音楽とのビジュアル的なつながりを生み出せたのです。さらに、この方式では、もし音楽が停止または一時停止した場合は、木の動きが必ず止まります。このアプローチは音楽のテンポ変更にも対応しているので、テンポも変えてみてください。

  12. Wwiseで Remote… をクリックしてWwise Adventure Game (Editor) を強調表示にし、 Connect をクリックします。

  13. ツールバーのSearchフィールドに"Music region"を入力し、次に Music_Region のSwitch Containerをクリックします。

  14. Music_RegionsのProperty Editorで、 Playback Speed 値を 2.5 までドラッグします。

  15. Unityに戻り、同じ木を見てみます。

    木は相変わらず音楽のリズムに合わせて動いていますが、その周期が、音楽のテンポを上げたので、明らかに速まっています。もし木がサイクルを完了できない(サイズを大きくし、小さくできない)場合は、RhythmActionsスクリプトのSpeedパラメータを上げて、動きが、次のコールバックノティフィケーション前に完了するようにします。これで Playモードを終了 できます。

[注釈]

今後の演習用に、Playback Speedを1に戻すのを忘れないでください。

AkEventやAkAmbientコンポーネントは、数個程度のゲームオブジェクト用にコールバックを設定するには、一番早い方法です。ただ、多数のゲームオブジェクトに適用したい場合は、この方式では一個一個追加しないといけないので、理想的ではありません。次のセクションで学ぶ、スクリプトからコールバックを有効にする方法の方が、メリットが大きいです。