Unityに関連する記事です

 引き続き音楽の面でのゲームの演出を追加していきます。



発展17 ーボイスの再生ー

 この手順ではタイミングに合わせて ボイス を再生する処理を実装していきます。

 9.ボイス用のオーディオファイルをインポートし、SoundDataSO スクリプトを修正して、ボイス用のオーディオデータを登録する
10.SoundManager スクリプトを修正し、ボイス用の再生・停止処理を追加する
11.適宜なタイミングに合わせてボイスを再生する処理を実装する



 新しい学習内容は、以下の通りです。

 ・自分で処理全体の設計ロジックを考えて1つずつ処理を実装する



9.ボイス 用のオーディオファイルをインポートし、SoundDataSO スクリプトを修正して、ボイス 用のオーディオデータを登録する

1.設計


 こちらはオプション的な処理の追加になります。

 SE によってヒット音や攻撃音を演出する方法以外に、状況に合ったキャラのボイスを再生して演出を行う方法を実装します。
また種類によっては複数のボイスを用意し、それらの中からランダムでボイスを再生させる方法も実装します。
例えば、バレットの発射時にはボイスを3種類用意しておいて、発射するたびに、3種類の中から1つのボイスを再生させるようにします。



 無料の音楽サイトや持っている音源などをUnityへインポートして、ゲーム内で音楽を鳴らすための準備をします。

 まずはどのタイミング・シーンで ボイス を鳴らすかを想定し、その種類分の ボイス が必要になることを把握します
今回想定しているのは以下の6種類です。左側が想定するファイル名、右側がボイスを鳴らす場面です。

<ボイス リスト>
 1.Start,         --  ゲーム開始時の演出のタイミング。演出開始でも、演出中でも。2種類
 2.Loose,       --  ゲームオーバーの UI 表示のタイミング。2種類
  3.Win,       --  ゲームクリアの UI 表示のタイミング。1種類
  4.Attack,        --  プレイヤーがバレットを生成して発射するタイミング。3種類
  5.Hit,       --  プレイヤーのバレットがエネミーにぶつかったタイミング。2種類
  6.Warning,       --  ボスの警告演出の開始のタイミング。2種類

 今後、ボイスを鳴らしたいタイミングが増えた場合には、上記に追加をして検討してください。

 なお場面の最後に書いてある2種類などの部分は、ランダムで再生する場合に用意するボイスのオーディオファイルの数です。
これは任意です。今回採用している数を参考として記述しています。


2.ボイスを再生する場面をイメージして、オーディオファイルを探してダウンロードする


 無料の音源ダウンロードサイトなどへアクセスして、頭の中で場面を思い浮かべながら、どんなボイスがよいか、視聴しながら決めていきましょう。
先ほど提示した場面に合わせて、各場面につき1つ、合計6種類のオーディオファイルを用意をしてください。
ランダムに再生したい場合には、1つの場面につき、2種類以上のオーディオファイルを用意してください。

 ダウンロードしたオーディオファイルは、上記のボイスリストを参考にファイル名を変更しておきましょう。
場面ごとに複数のボイスがある場合には Attack_1 のように、最後に通し番号をつけておくと便利です。
なお、今回の教材はどのようなボイスを採用しているのかをファイル名で参考できるようにしているため、変更なしで利用しています。


3.オーディオファイルをUnityへインポートする


 Unityへオーディオファイルをインポートする方法は、画像ファイルと同じです。
Unityへドラッグアンドドロップしてフォルダへ移動することでインポートされます。

 今回は Audio フォルダ内の Voiceフォルダ内に全ファイルをインポートしています。
またボイスの種類が多いため、さらに場面ごとにフォルダを用意して格納しています。(まったく同じ名前に揃える必要はありません。)


Audio / Voice フォルダ画像



 無料サイトからダウンロードした場合にはオーディオファイルが圧縮されている可能性がありますので、必ず 解凍を行った上 でUnityへインポートしてください。
解凍されていないオーディオファイルは インポートが行えません


4.SoundDataSO スクリプトを修正して、ボイス管理用のクラスを新しく追加する


 SoundDataSO スクリプトを修正して、BGM や SE と同じように、ボイス専用のクラスを作成して、
クラス単位で、オーディオファイルを登録したり、ボイスの種類を登録できるようにしましょう。

 enum、クラスの構成、List など、すべて BGM や SE の際と同じ構成での製作になります。

 必要な情報を考えてから実装してみましょう

 記述する順番には任意ですが、enum の情報(SE の種類)を VoiceData クラスで利用し、完成した VoiceData クラスを List にするので、
下記のような順番で記述していくとよいでしょう。

<スクリプト内に実装する内容の例>
 1.ボイス用の enum。Hit、GameOver といった再生するタイミングや、シーン名で列挙子を登録しておく
 2.ボイスを管理する1つ単位でのデータ(通し番号、ボリューム、オーディオファイル、【1】で作成した enum によるボイスの種類などのデータ群)を扱うクラス
 3.【2】のボイス用のクラスのデータを複数作成してまとめる List(リスト)



SoundDataSO.cs


 スクリプトを作成したらセーブします。

 なお、今回は順番に enum とクラスを追加しているため、enum 、クラス、リスト、という宣言になっていますが、
enum 全種類、クラス全種類、リスト全種類のように、記述する内容を統一したり、変更していただいても問題ありません。

 完成したスクリプトは 必ず見直す ようにして、自分が読みやすいか、他人が読みやすいか、という部分に気を使って修正をしていくと
キレイで見やすいコーディングの技術を習得することにもつながります。


5.SoundDataSO スクリプタブル・オブジェクトにボイス用のデータの設定を行う


 Datas フォルダ内にある SoundDataSO スクリプタブル・オブジェクトを選択してインスペクターを確認します。
SoundDataSO スクリプトにて宣言した voiceDataList 変数がインスペクターに表示されて、 Sizeが 0 になっています。
ボイスの種類として登録した列挙子の数に合わせて、voiceDataList 変数の Size を 6 に変更してください。Element 0 〜 5 が下に作成されます。

 なお、1つの場面に複数のボイスを用意した場合には、その合計数を Size に指定してください。
今回の教材は合計 12 種類のボイスを利用するため、Size を 12 に設定しています。


 下記の画像はサンプルの設定です。
オーディオファイルは Audio フォルダにあるボイス用のオーディオファイルをドラッグアンドドロップしてアサインしてください。


インスペクター画像



インスペクター画像



 各数値やオーディオファイルは任意ですが、No の値だけは異なる番号で設定してください。できれば 0 から連番が理想です。
この番号はオーディオファイル用の番号として利用する可能性がありますので、同じ番号を重複して設定してしまうと、同じ番号のオーディオファイルが複数存在することになり、
番号によってオーディオファイルを特定することが出来なくなります。

 BGM の再生中にボイスが一緒に鳴るようになりますので、あまりに BGM が大きいとボイスの音が聴こえないことがあります。
まずは Volume の値も大きめ値にしておいて、BGM と一緒にボイスを鳴らしてから調整を行うようにします。


 以上でこの手順は完了です。


10.SoundManager スクリプトを修正し、ボイス用の再生・停止処理を追加する

1.設計


 SoundManager スクリプトも、SoundDataSO スクリプトと同じように、ボイスの情報を追加して、
再生用のメソッドと停止用のメソッドを用意します。

 SoundManager はシングルトンパターンですので、ボイスの再生についてもメソッドを呼び出す命令を実行すれば
いずれのスクリプトからでも参照なしで SE を再生することが出来ます。

 BGM や SE の実装を振り返りながら実装を行ってください。
なおボイスは常に1つだけを鳴るようにしましょう。重複して鳴ると、何をしゃべっているのか分からなくなります。
ただし、重複して鳴るようにするのを仕様として設計するのであれば、それでも問題ありません。


2.SoundManager スクリプトを修正する


 必要な情報を宣言し、メソッドを考えてみてください。

 場面ごとにボイスの再生をランダムにしたい場合には、SoundDataSO スクリプタブル・オブジェクトに登録されているボイスのデータを、
各場面ごとに List に抽出して、そちらを利用する必要があります。そのため、6種類の場面に合わせた List を用意しておいて、そちらを利用するようにしましょう。


SoundManager.cs



3.ゲームを実行して動作を確認する


 ゲームを実行してみてください。Awake メソッドの処理が実行されて、ボイス用の AudioSource コンポーネントが新しく1個追加されます。(合計13個)
また、各ボイスの場面ごとに仕分けされた6種類の List に、それぞれの場面ごとのボイスが代入されます。


SoundManager ゲームオブジェクト インスペクター画像



SoundManager ゲームオブジェクト インスペクター画像



 List はちゃんと仕分けされていることの確認が済んだら private 修飾子にしていただいて構いません。

 以上で完成です。最後に、ボイスを鳴らしたい場面に再生する処理を記述しましょう。


11.適宜なタイミングに合わせてボイスを再生する処理を実装する

1.設計


 今回追加したボイスの再生処理を適宜なタイミングで鳴るように、自分のスクリプトに処理を追加してみましょう。

 メソッドの呼び出し命令は BGM や SE の再生の場合と同じです。引数の型の指定が VoiceType になっています。

  // 開始時のボイス
  SoundManager.instance.PlayVoice(SoundDataSO.VoiceType.Start);

 どの場面でボイスを鳴らすか、ボイスの種類に合わせて処理を追加してください。
複数の種類があるものは、自動的にそれらの中から1種類のボイスがランダムに選択されて再生されます。

 色々な処理の記述をして、どのような挙動になるかを体験してください。



 以上でこの手順は終了です。

 => 次は 発展18 ースマホでの操作機能ー です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます