スポンサーリンク

Unity実習27、音を鳴らしてみよう

SnapCrab_NoName_2016-6-13_17-13-53_No-00.jpg


最近は、小学生がプログラム書いてUnityやっちゃう時代なんですね
なんか敗北感を感じます

はい、前回の続きで
出来上がってきたゲームにBGMやSEを追加していきます

まず、ProjectのAssetsフォルダ内に
UNIDRA_DATA/Data/MainGame/SoundAssets をドラッグ&ドロップ
SnapCrab_NoName_2016-6-13_14-32-58_No-00.jpg

Projectで選択すると、Inspectorにインポート設定が表示されます
その中の重要な項目の説明がありますが、いくつか確認できないですね
Unity実習9あたりでやった内容と同一のものがああるので、多分場所が変わった?

・Audio Format
  ゲーム実行時に圧縮された音声データを使うかどうかの設定。"Native"だと圧縮せず、"Compressed"だと出力するプラットフォームに合わせてOggやmp3に変換します。

・3D Sound
  ゲーム上の3D空間をシミュレートして、立体的な音にするかを決めます。

・Load type
  音声データのロード方法を選べます。Audio Formatが"Native"の場合"Load into memory"か"Stream from disc"が選べて、"Compressed"の場合は"Decompress on load"か"Compressed in memory"か"Stream from disc"が選べます。

  "Load into memory"は、メモリにロードしておき、メモリから音声を再生
  "Stream from disc"は、ディスクから直接再生
  "Decompress on load"は、圧縮されたデータを展開してメモリにロード、再生
  "Compressed in memory"は、圧縮データをメモリに読み込み、展開しながら再生

・Compression(kbps)
  圧縮時の音声データのビットレート

設定をしたら Apply 元に戻したかったら Revert を選びます
殆どの項目は合致しませんがね...どうしたものか
SnapCrab_NoName_2016-6-13_14-56-7_No-00.jpg

仕方がなのでUnity5の方の設定はどんなもんか、マニュアルも見てきました

・Force To Mono
  オンになっている場合、オーディオクリップは単一チャンネルサウンドにダウンミックスされます。ダウンミックス後に信号がピーク・ノーマライズされます。これは通常、ダウンミックス処理を行った信号は処理前より静かになります。

・Normalize
  When this flag is set, audio will be normalized upon mono-downmixing. Consider making this available for non-downmixed sounds too.
  機械翻訳「この旗がセットされるとき、オーディオはモノ・ダウン混合と同時に正常化されます。
これを非ダウン混合音にも利用できるようにすることを考えてください。」

・Load In Background
  オンになっている場合、主要スレッドで遅延を生じさせることなくバックグラウンドでオーディオクリップが読み込まれます。デフォルトではオフになっているため、通常は Unity の標準挙動(シーンが再生される前にすべての AudioClip が完全に読み込まれる)になります。バックグラウンドで読み込み中の AudioClip の再生リクエストは、読み込みが終了するまで保留されます。読み込み状況は AudioClip.loadState プロパティーで確認できます。

・Preload Audio Data
  オンになっている場合、シーンの読み込み時にオーディオクリップもあらかじめ読み込まれます。Unity の標準挙動ではシーンが再生される前にすべての AudioClip が完全に読み込まれるため、通常はオンになっています。このフラグが設定されていない場合、オーディオデータは、最初の AudioSource.Play()かAudioSource.PlayOneShot() か AudioSource.LoadAudioData() で読み込まれて AudioSource.UnloadAudioData() で再び破棄されます。

・Load Type
 ・Decompress On Load
  オーディオファイルは読み込まれるとすぐに展開されます。サイズの小さい圧縮サウンドにこのオプションを使えば、その場での展開に伴うパフォーマンスのオーバーヘッドを防ぐことができます。ただし、Vorbis でエンコードされたサウンドを読み込み時に展開すると、圧縮されたままの場合の10倍程(ADPCM エンコーディングでは約3.5倍)のメモリーを使用するので、サイズの大きいファイルにはこのオプションを使用しないでください。

 ・Compressed In Memory
  サウンドはメモリ中では圧縮されたままで、再生中に展開されます。このオプションは若干のパフォーマンスオーバーヘッドが発生します(特に Ogg/Vorbis 圧縮ファイルの場合)ので、メモリー使用量が大きすぎて読み込み時に展開できないファイルにのみに使用してください。展開はミキサースレッドで行われ、Profiler ウィンドウ内の Audio ペインにある “DSP CPU” のセクションでモニタリングできます。

 ・Streaming
  サウンドをその場でデコードします。この方式では、圧縮データのバッファーのための使用メモリーが最小限に抑えられます。データはディスクから段階的に読み込まれて必要に応じてデコードされます。展開は別のストリーミングスレッドで行われますが、その CPU 使用量は Pofiler ウィンドウ内の Audio ペインにある “Streaming CPU” のセクションでモニタリングできます。

・Compression Format(形式を選択、Audio Formatと似ている
 ・PCM
  品質は高くなりますが、ファイルサイズが大きくなります。非常に短い音響効果に最適です。

 ・ADPCM
  この形式は、足音や衝突音、武器などのノイズを多く含んでいて大量に再生される必要があるサウンドに便利です。圧縮率は PCM の3.5分の1ですが、CPU の使用量は MP3/Vorbis 形式に比べ格段に少なくなるため、上記のような種類の音には適しています。

 ・Vorbis/MP3
  圧縮ファイルは小さくなりますが PCM オーディオに比べると若干クオリティが落ちます。圧縮率は Quality スライダーの調整で可能です。この形式は中程度の長さの SE や音楽に適しています。

 ・HEVAG
  PS Vita で使用されるネイティブ形式です。 ADPCM 形式と非常に似た仕様です。

・Quality
  圧縮する クリップに適用される圧縮の度合いを決定します。PCM/ADPCM/HEVAG 形式には適用されません。ファイルサイズに関する情報はインスペクターで確認できます。この値を調整する方法としては、スライダーをドラッグし、ファイルサイズを小さく保ったまま「許容できるレベルの」再生クオリティになるポイントを見つけるのがよいでしょう。(注)Original Size は元ファイルのサイズなので、例えばこれが MP3 ファイルで Compression Format が PCM (非圧縮)に設定されている場合、Ratio は結果として 100% を超える値になります。これは、ファイルが非圧縮で保存されるために元々のソースの MP3 ファイルよりも大きなスペースを取ってしまうからです。

・Sample Rate Setting
  PCM や ADPCM 圧縮形式では、サンプルレートの自動最適化あるいは手動による低減が可能です。

 ・Preserve Sample Rate
  サンプルレートは変更されません(デフォルト)。

 ・Optimize Sample Rate
  サンプルレートは、解析された最高周波数の成分に基づいて、自動で最適化されます。

 ・Override Sample Rate
  サンプルレートを手動でオーバーライド可能なので、周波数成分を破棄したいときに使用できます。


BGMのインポート設定
Projectで Assets/SoundAssets/bgm_game_field を選択
Inspectorで以下のように設定しろ、となっています
AudioFormat: Compressed
3D Sound: チェックしない
Load type: Stream from disc

が、そうはいかないので
Load Type: Streaming
Compression Format: Vorbis
にします、後は放置しておけばいいかな?
Streamingは長いデータ向けですから
3D SoundはSceneに取り付けた後に設定できたはずなので置いておきます
SnapCrab_NoName_2016-6-13_15-33-20_No-00.jpg

メニューSEのインポート設定
se_game_clear を選択
Inspectorで
Load Type: Decompress On Load
Compression Format: Vorbis
これで、展開済みの音声データを素早く再生、といった本と同じ設定になります
形式は統一しておけばいいだろうということで
SnapCrab_NoName_2016-6-13_15-40-22_No-00.jpg

メインゲームのSEのインポート設定
のこり9つのデータに同じ設定をします
Load Type: Decompress On Load
Compression Format: Vorbis
多分、元からそうなってるかな?
この9つは後で3Dをオンにしたいと思います
SnapCrab_NoName_2016-6-13_15-46-33_No-00.jpg

本に、今度は音声を取り付けた後のInspector、そこの項目についての説明がありますが
まぁ、古いのを書いても...ってことで飛ばして、Unity5のマニュアルで解説していきます

Audio Source(オーディオソース)の項目

・Audio Clip
  再生される音声クリップを参照します。

・Output
  サウンドは Audio Listener あるいは Audio Mixer を通して出力できます。

・Mute
  有効にすると、音声は再生されますが、ミュートになります。

・Bypass Effects
  オーディオソースに適用されるフィルター効果を素早く「バイパス」します。簡単にすべての効果をオン・オフできます。

・Bypass Listener Effects
  すべてのリスナーエフェクトのオン・オフを一度に切り替えられます。

・Bypass Reverb Zones
  すべての Reverb Zones のオン・オフを一度に切り替えられます。

・Play On Awake
  これが有効になっていると、シーンが起動すると同時にサウンドが再生されます。無効になっている場合は、スクリプトで Play() コマンドを使用してスタートする必要があります。

・Loop
  Audio Clip の終了時点でループさせる場合はこれを有効にします。

・Priority
  シーン内に存在するその他のオーディオソースに対しての、このオーディオソースの優先度を設定します。(Priority: 0 = 最優先。256 = もっとも低い優先度。デフォルト = 128。)音楽トラックは 0 に設定することで、所々消されてしまうのを防げます。

・Volume
  Audio Listener から 1 ワールドユニット(1メートル)の距離における、音の大きさです。

・Pitch
  Audio Clip のスローダウンあるいはスピードアップによる音程の変化の度合いです。1 が通常の再生スピードの値です。

・Stereo Pan
  2D サウンドのステレオフィールドの位置を設定します。

・Spatial Blend
  3D エンジンがオーディオソースに影響を与える度合いを設定します。

・Reverb Zone Mix
  リバーブゾーンにルーティングされる出力信号の量を設定します。量は(0 - 1) の範囲のリニアですが、(1 - 1.1) の範囲 で 10 dB 増幅を可能にし、近くの領域と遠くから聞こえる音のエフェクトを達成するのに役立ちます。

コレより下はさらにこだわった設定なので詳しくはtle="コチラ">コチラ


BGMを鳴らしてみよう
GameSceneの間BGMが鳴るように設定
Hierarchyで MainCamera を選択
Inspectorで Add Component > Audio > Audio Source を選択
Audio Clipにbgm_game_fieldをドラッグ&ドロップ
Play On Awake: チェックを入れる
Loop: チェックを入れる
Volume: 0.1
Spatial Blend: 0
↑これが0だと2D音声(距離関係なしに一定の音量で流れる)
SnapCrab_NoName_2016-6-13_15-56-50_No-00.jpg

ゲームを始めるとBGMが流れます

SEを鳴らしてみよう
今回、大量にスクリプトの更新があります
本だといつ更新してはInspectorを、とやっていますが、面倒なので最初にまとめて更新してしまいましょう
UNIDRA_DATA/Data/MainGame/Script/Chapter16に
AttackArea, AttackAreaActivator, DropItem, EnemyCtrl, GameRuleCtrl, PlayerCtrl
の、6つがあるのですべて更新します
途中でUnity5用に書き換えるかと聞かれたら、書き換えて下さい

攻撃した時のSE、死んだ時のSE
ProjectにあるPlayerプレハブを選択
InspectorでAttack Area ActivatorとPlayer Ctrlにそれぞれ
se_player_attack と se_player_death をドラッグ&ドロップ
SnapCrab_NoName_2016-6-13_16-33-34_No-00.jpg

ProjectにあるWargプレハブを選択
Attack Area ActivatorとEnemy Ctrlに
se_enemy_attack と se_warg_death をドラッグ&ドロップ
SnapCrab_NoName_2016-6-13_16-35-28_No-00.jpg

ProjectにあるDragonプレハブを選択
Attack Area ActivatorとEnemy Ctrlに
se_enemy_attack と se_dragon_death をドラッグ&ドロップ
SnapCrab_NoName_2016-6-13_16-36-27_No-00.jpg

攻撃が当たった時のSE
HierarchyビューでPlayerのツリー内にあるSword01を見つける
Inspectorで Attack Area に se_player_attack_hit をドラッグ&ドロップ
Prefabの Apply を押します
SnapCrab_NoName_2016-6-13_16-38-22_No-00.jpg

SnapCrab_NoName_2016-6-13_16-38-28_No-00.jpg

同様に、WargのHEAD1_Cに se_enemy_attack_hit
Prefabの Apply を押す
WargはHierarchyにないと思うので、一時的にSceneにプレハブを置いてから設定
SnapCrab_NoName_2016-6-13_16-41-58_No-00.jpg

SnapCrab_NoName_2016-6-13_16-42-27_No-00.jpg

DragonのHAND_Rに se_enemy_attack_hit
Prefabの Apply を押す
SnapCrab_NoName_2016-6-13_16-44-0_No-00.jpg

SnapCrab_NoName_2016-6-13_17-5-38_No-00.jpg

アイテム獲得のSE
Projectのプレハブにある緑と赤のアイテムをそれぞれ選択
DropItemに se_item_heal と se_item_power をドラッグ&ドロップ
SnapCrab_NoName_2016-6-13_16-46-55_No-00.jpg

SnapCrab_NoName_2016-6-13_16-47-8_No-00.jpg

ゲームクリア時にSEを鳴らす
HierarchyのGameRuleを選択
se_game_clear をドラッグ&ドロップ
SnapCrab_NoName_2016-6-13_16-48-9_No-00.jpg

実際にゲームを実行すると、音が出るようになっています
これで今回の音の処理は終わりです!
面倒だったなぁ

次回はゲームを完成させよう、ということで出力して各プラットフォームで遊べるようにします
ちなみに、エラーが大量に出ているので
このままゲーム作って良いのかよという感じ
駄目なんでしょうけどね、原因を探ろうにも解らないのでゴリ押し
SnapCrab_NoName_2016-6-13_17-12-38_No-00.jpg
関連記事

Leave a Reply


管理者にだけ表示を許可する

Comment

Leave a Reply


管理者にだけ表示を許可する