バージョン
Wwiseでは、ゲーム内のオーディオをイベントでドライブします。プロジェクト階層のサウンドオブジェクトやオブジェクトグループに対して、イベントがアクションを適用させます。イベントに設定されたアクションによって、Wwiseオブジェクトの再生、停止、一時停止などが決まります。例えば、ファーストパーソン・シューティングゲームでプレイヤーが死ぬ時のイベントを作ってみましょう。このイベントは、 Die(死ぬ)サウンドを再生させ、再生中の EnergyShield(エネルギーシールド)のサウンドを停止させるものです。
下図は、このイベントに対応するWwiseの様子を示しています。
サウンドデザイナーはゲーム内のオーディオをドライブするMute(ミュート)、Set Volume(ボリューム設定)、Enable Effect Bypass(エフェクトのバイパス)などのアクションタイプを、多数の選択肢から選べます。例えば、プレイヤーがゲーム本編を出てメニューに入る時のイベントを作ってみましょう。このイベントは Enter_Menu サウンドを再生させ、ミュージックバスの音量を10dB下げ、それ以外を全て一時停止させるものです。
下図は、このイベントに対応するWwiseの様子を示しています。
できるだけ多くの状況に対応するために、Wwiseでは下記の2種類のイベントを使います。
アクションイベント ― 再生、停止、一時停止などのアクションを1つ以上用いて、ゲームのサウンド、ミュージック、モーションをドライブするイベント。
ダイアログイベント ― ステートやスイッチのデシジョンツリーの一種を用いて、再生するオブジェクトを動的に決定するイベント。
Wwiseで作成したイベントはゲームエンジンに統合して、ゲーム中に適宜呼び出します。イベントは開発の初期段階でゲームエンジンに統合できます。その後、イベントの微調整を続けても、ゲームエンジンに改めて統合する必要はありません。
ゲーム中のサウンド、ミュージック、モーションをドライブするのは、Wwiseのアクションイベントです。アクションイベントが、プロジェクト階層に入っているサウンドなどの構成に対してアクションを適用します。1つのイベントにアクションを1つ、または一連のアクションを複数、入れることができます。選択したアクションによって、Wwiseのオブジェクトの再生、一時停止、停止などが決まります。
Example 1. アクションイベントの活用例
例えば、ゲーム中のキャラクターが、隠されたドキュメントを手に入れるために洞窟に入る場面を考えてみましょう。キャラクターが森から洞窟に入る時、ゲーム中のアンビエントサウンドを変化させなくてはなりません。この変化をトリガーさせるために、Woods(森)のアンビエントサウンドを停止し、Cave(洞窟)のアンビエントサウンドを再生する一連のアクションを含むイベントを作成します。Wwiseで作成したイベントをゲームエンジンに統合すると、キャラクターが洞窟に入った瞬間に、ゲームエンジンがこのイベントを呼び出します。
下図は、再生中のアンビエント音を変えるために、ゲームエンジンがイベントをトリガーさせる様子を示しています。
サウンド、ミュージック、モーションの各オブジェクト間の切り替わりに対処するために、イベントアクションで開始するオブジェクトや終了するオブジェクトのディレイやフェードイン・フェードアウトを設定するパラメータもあります。
ゲーム中のダイナミックダイアログをドライブするのが、Wwiseのダイアログイベントで、再生する台詞を判断するためのルールや条件セットが設定されています。ダイアログイベントを使い、ゲームに存在する様々なシナリオ、条件、結末などを再現できます。あらゆる状況に確実に対応するために、デフォルトや予備条件も設定できます。
これらの条件は全てステート値やスイッチ値を使用して定義されます。これらのステート値やスイッチ値を組み合わせて、ゲーム内の条件や結果を定義するためのパスを作ります。次に各パスに対して、Wwiseサウンドオブジェクトをひも付けます。ゲーム中にダイアログイベントが呼び出されると、ゲームは現在の条件とダイアログイベントで定義された条件を比較します。ゲームの現状と合う条件またはステートパスやスイッチパスが、再生するダイアログ(台詞)を決定します。
Note | |
---|---|
ダイアログイベントはゲーム中のダイアログを扱うために開発されましたが、ダイアログ専用にする必要はなく、ゲーム内の他の様々な目的に使用できます。 |
Example 2. ダイアログイベントの活用例
例えば、実況中継付きのアイスホッケーゲームを考えてみましょう。プレイヤーがシュートして得点した時は、プレイヤーのアクションに対応した実況中継が流れるべきです。Wwiseで様々な可能性や結末を設定するために、まず Player(プレイヤー)、Action(アクション)、Transition(接続詞)などのダイアログイベントを作成します。ゲームのイベントに対応するステート値やスイッチ値を作成し、イベントにセットとして入れます。各条件や結末を定義するステートパスまたはスイッチパスを作り、各ステートパスまたはスイッチパスに、適切なボイスオブジェクトを割り当てます。ゲームプレイ中に、ゲーム側が現在のステート値またはスイッチ値と、Wwiseで定義したパスを照合し、再生すべきボイスオブジェクトを判断します。
下図は、「クロスがシュートし、得点した!」という実況中継を、Wwiseのダイアログイベントが生成する様子を示しています。
イベント内の全てのアクションに、スコープ(対象)が設定されています。スコープの設定によって、そのイベントのアクションを全ゲームオブジェクトにグローバルに適用するのか、またはイベントをトリガーさせたゲームオブジェクト限定で適用するのかを決定します。アクションのスコープは、サウンドデザイナーが選択できる場合と既定の場合があります。
下表は、前述のEvent Bの3つのイベントアクションについて、それぞれのスコープを示しています。
イベントアクション |
スコープ(対象) |
備考 |
---|---|---|
Play > Menu_Enter |
ゲームオブジェクト |
Playイベントは常に単独のゲームオブジェクトによってトリガーされるため、スコープを「ゲームオブジェクト」に設定。 |
Set Volume > Music |
グローバル |
Set Volumeアクションはバスに適用され、バスは本質的にグローバルであるため、スコープを「グローバル」に設定。 |
Pause All Except > Music |
グローバル |
Pause All Exceptアクションはミュージックバスに適用され、ミュージックバスは本質的にグローバルであるため、スコープは自動的に「グローバル」に設定。 |
下図は、このイベントに対応するWwiseの様子を示しています。
Note | |
---|---|
スコープは、Wwiseの多くの要素に適用される重要な概念です。各要素のスコープを理解すれば、様々な状況でどの要素を使うべきかが判断しやすくなります。 |
ゲームのイベントを作成した後、サウンドデザイナーはイベントをサウンドバンク(SoundBank)にパッケージします。サウンドバンクをゲームにロードすることで、ゲームのコードでイベントをトリガーできます。例えば、プレイヤーが殺された時に対応するイベントをトリガーすることによって、 Die サウンドが再生され、EnergySheild サウンドが停止されます。
イベントをゲームに統合するには、イベントアクションをどのゲームオブジェクトに対して実行させるのかを、プログラマーが指定する必要があります。これはイベントを送出(post)して行います。オーディオを変えたい時は、ゲームコードによってイベントが送出される必要があります。イベントの送出には、文字列やIDを使います。
ゲーム内のサウンドをトリガーする時にイベントを採用する主な利点は、サウンドデザイナーのコントロールと柔軟性が、追加のプログラミングをせずに広がることです。イベントは全てサウンドデザイナーがWwiseで作成し、プログラマーがゲームに統合します。ゲームに統合されたイベントに対して、サウンドデザイナーが作業を続けることが可能で、中に含まれるアクションや対象のオブジェクトを変更し、修正できます。ゲームは相変わらず同じイベントをトリガーするので、サウンドデザイナーによる変更は、開発者による追加作業やコードの再コンパイル抜きでゲーム内に反映されます。