レッスン 2

目次

カスタムVolumetricスクリプト(Custom Volumetric Scripts)

AkAmbientのSimple、Large、MultiPositionの3種類のモードはアンビエンス音に大変適していますが、どのモードもサウンドポイントで成立していることを忘れないでください。つまり、音のポジションによってAttenuation ShareSetが変化し、例えばボリュームなどを左右します。これがミキシング時に課題となることがあり、エリア全体でアンビエンスボリュームが一定でないため、ミキシングのレベルを、場所を変えて何度も検証しなければなりません。そうなると自分でスクリプトの動作をカスタマイズすることも検討できますが、Wwise Adventure Gameでは、アンビエンスをミキシングするためのソリューションとして、EventPositionConfinerというスクリプトを準備しました。

EventPositionConfinerスクリプトは、接続されたTrigger Colliderを探し、AkListenerのポジションに基づいて、常にサウンドポジションを移動させます。その結果、サウンドのAttenuation ShareSetが、プレイヤーがTrigger Colliderの中に入れば、常にDistanceは0に設定されます。

プレイヤーがTrigger Colliderを出ると、AttenuationのDistanceは、リスナーゲームオブジェクトから、Trigger Colliderの最も近い点までの距離に基づいて決まります。このため、Sound Positionによる減衰の球体が、Trigger Colliderメッシュのような減衰をつくり出し、端では多少の丸みがつきます。

[ヒント]

EventPositionConfinerスクリプトは、Inspectorで設定した間隔でサウンドポジションをアップデートします。あなたも似たようなスクリプトを作成する場合は、非常に速いポジション直しの機能を維持し(Main Camera / AkListenerのスピードについていけるように)、接近したときのスプレッドをAttenuation ShareSetで多少増やすとよいでしょう(サウンドポジションの調整が遅すぎても目立ちにくい)。

これから、EventPositionConfinerをVillageのRiver(川)に追加する手順を説明します。

  1. Unityのメニューで、 Audiokinetic > Certification > 301 > Lesson 2 を選択し、 EventPositionConfiner を選択します。

  2. Hierarchyで L2_4B - Village Environment Scene を選択し、Wwise を展開し、 River ゲームオブジェクトを選択します。

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

    InspectorにEvent Position Confinerコンポーネントが表示されます。中に2つのプロパティがありますが、Update Interval(更新の間隔)は0.05のままにしておき、EventはAmbient_RiverのEventに設定します。

  4. Event Nameプロパティで、 Ambient_River のEventを選択します。

    EventPositionConfinerスクリプトが追加され、Riverサウンドをアサインできました。仕組みをより良く理解するために、ゲームをプレイして、Collider Shapeの中に含まれているサウンドのポジションを観察してください。

  5. Unityのメニューで、 Window > Layouts を選択し、 2 by 3 を選択します。

    このレイアウトであればSceneビューがGameビューの隣にくるので、ゲームをプレイしながら、Sceneビューでしか表示されないサウンドポジションを観察できます。

  6. Hierarchyで L2_4B - Village Environment Scene を選択し、Wwise を展開し、 River ゲームオブジェクトを選択します。

  7. マウスをSceneビューに置き、' F 'を押してフォーカスを River ゲームオブジェクトにあてます。

    これで、SceneビューにRiverが表示されるはずです。Riverを囲むように緑の線が表示されますが、これがBox Colliderです。Triggerコライダー全体が表示されるように、スクロールアウトするか、カメラを動かしてください。

  8. Sceneビューを調節してTrigger Collider全体が見えるようにします。

    準備完了です!あとは、ゲームをプレイして、作業結果をテストするだけです。

    [ヒント]

    'Maximize On Play' がGameビューで無効になっていることを確認してください。この選択肢はデフォルトで無効になってますが、ほかで使って有効にしてあるかもしれません。

  9. Play をクリックし、Playモードに入ります。

    [注釈]

    EventPositionConfinerスクリプトは、サウンドのポジションが小さく青い球で分かるように設計されています。カメラのアイコンやその他のガジェットと同様に、この球もGameビューや、ゲームのコンパイルしたバージョンには表示されません。

  10. Main Cameraを回しながら、Sceneビューの小さく青い球を探します。

    CameraがTrigger Colliderの外にあるときは、球が一番近い端の部分に沿っています。

  11. Main CameraをTrigger Colliderの中で動かします。

    球がMain Cameraの真下にきたことに注目してください(カメラは、小さいカメラアイコンで表示されます)。

  12. ESC を押してWAGメニューを開き、 Play をもう一度クリックしてPlayモードを終了させます。

このように、AkListener(Main Cameraに追加されている)がTrigger colliderの中にあるときは、常に、サウンドが中心に残っています。そしてTrigger colliderの外にあるときは、サウンドは、AttenuationのDistance設定に従い、その距離によって変化します。EventPositionConfinerスクリプトはどのColliderとも相性がよく(Meshも、Convexに設定されていれば)、適用範囲が大変広いです。