ゲームといったらBGMや効果音ですよね。無音でゲームをやる機会の方が圧倒的に少ないかと思います。
プレイヤーが走る時、ジャンプする時の音。バックで流れているBGMの音。敵キャラにダメージを与えた音。ゲーム内ではありとあらゆる場面で音が使われています。今回は音をUnityで再生させる手順を紹介したいと思います。
▼目次
ゲームと音楽
ゲームの面白さを占める割合ってグラフィックやゲーム性はもちろんですが、BGM・効果音って結構大事な要素だと思います。
ゲームをやる時に音を出すことができない場だからといって無音でプレーするのと音をしっかり出してプレーするのとでは臨場感が大きく違ってきますからね。昔からゲームの名曲を集めたBGM集もある位ですからBGM=ゲームのイメージとリンクするといっても過言ではないでしょう。
「Unity」BGM・効果音
ではUnityでこのBGM・効果音を付けるにはどのようにしたらいいでしょうか。Unityで音を出すための仕組みは初心者でも簡単にできるように用意されています。
- Audio Clip 「音源 / CD・DVD」
- Audio Sourcesで「音を出す / スピーカー」
- Audio Listenerで「音を聞く / マイク」
上記のような3つの仕組みです。
ただ単にBGMを用意して設定して流すという仕組みではなくて、Unityの3D空間で「音を出す」(Audio Sources/スピーカー)・「音を聞く」(Audio Listener/マイク) この2つの独立した機能を組み合わせることによって1つのBGMとして機能を実現できているんだということが把握できればBGMのための基本的な機能は理解できたといってもいいでしょう。
具体的にはGUIを操作する方法と、スクリプトから実行する方法がありますが今回はGUIで操作する方法になります。
「Unity」アセットストア
まず必要となるのは音源となるファイルです。用意するといっても音源を制作するソフトなどを使い1からBGMを作るというのは無理があります。
そこでこういったコンテツ制作で使用するためにフリーの音源素材がありますので、こういったものを活用するといいでしょう。
ただし、気を付けたいのがフリーの音源素材といっても全てのものが著作権を放棄しているというわけではないことです。
利用するフリー音源素材には必ずといっていいほど「利用規約」がありますから、使用する前に必ず確認しておきたいところ。
フリー音源素材の場合、これら2つのパターンが一般的ではないかと思います。
- ライセンス表記がフリーの条件
- ライセンス表記なしでフリーで利用可。しかし配布は駄目
- 非商用利用なら可。もしくは商用利用可
フリーの画像素材にも言える事ですがブログの素材としてなら問題なく使えたのが配布となると駄目という所がかなり多い気がします。
その配布という壁の問題が解消するのがUnityのアセットストアです。配布を前提とした形のライセンスだからです。だからといってアセットストア完全自由ですよというわけではありません。
アセットによっては個々にライセンスがある場合や改変は駄目だとかのライセンスがあります。まだ細かい所までライセンスを見ていませんが。
Unityのアセットストアを覗くと「音楽」「環境音」「効果音」などとなかなか充実しています。「SOUNDCLOUD」でサンプル再生する事もできます。
ゲームと音声フォーマット
音声ファイルのフォーマットには「.wav .mp3 .oga」等色々と種類があります。
となるとやはり・・
「どんなフォーマットを使えばいいの? 違いは?」という疑問が出てきます。
MP3
MP3にはライセンスがありました。普及してからライセンスフリーではないという事が発覚したとも言われている音声フォーマットです。
その内容は5000作以上のゲームを販売しているとMP3のライセンスが発生するというものでした。ただし、現在では2017年4月23日付けでMP3のライセンスが終了した模様です。
ちなみにUnityでは以下の拡張子の音声フォーマットを利用することができます。
この中から以下のフォーマット形式について見てみる事にしましょう。
- 「.aif」
- 「.wav」
- 「.ogg」
AIFF
アップルによって開発された音声フォーマットです。拡張子は「.aif」「.aiff」「.aifc」「.afc」、アイフとも呼ばれています。主にMacで利用されているようです。
WAV
マイクロソフトとIBMによって開発された音声フォーマットです。拡張子は「.wav」
圧縮がされないため音質は劣化せず良いとされていますが、容量が多くなってしまいます。
Ogg Vorbis
MP3のライセンスの話題をきっかけにライセンスフリーの音声フォーマットとして開発されたのがOgg Vorbis (オッグボルビス) です。拡張子は「.ogg」、オッグとも呼ばれています。
Oggの特徴は、非可逆音声圧縮フォーマット (不可逆圧縮)でライセンスフリーというところです。Oggは一般的にあまり知られていない印象ですがライセンスフリーという事があってアプリやゲーム制作の場ではよく使われるようです。
BGMを再生する -GUI-
[YouTube] Unity オフィシャルチュートリアル – 日本語訳入り
さて、ここから今回の本題となります。UnityにてBGM・そして効果音の音声を再生モードで鳴らすという作業をしていきます。「BGM→GUI」・「SE→C#」
▼まずはメニューから「GameObject」→「Audio」→「Audio Source」と選択します。どうやらAudio Sourceはオブジェクトにもなるしコンポーネントにもなるようです。
音楽ファイルをプロジェクトにインポート、またはフォルダから直接ドラッグ&ドロップします。
するとInspectorにAududio Sourceコンポーネントが現れシーン内のオブジェクトがスピーカーの形になりました。再生モードにすると音楽が流れました。一応これだけで音楽ファイルからBGMを再生する事が出来ます。
複数「Audio Source」も可能
試しに2台目、3台目とAudio Sourceを置いてそれぞれ別々の音源を入れて確認したら同時に違うBGMが流れました。
設定は・・
今回は音を出すのが目的なので細かい設定をしません。ざっとでも覚えておきたい設定項目だけ下に並べてみました。
Audio Source
- 「AudioCrip」… 使用される音声フォーマットのデータ
- 「Mute」… 再生されている状態で音量ゼロ
- 「Play On Awake」… 開始直後に自動再生
- 「Loop」… 繰り返しのループ
- 「Priority」… 優先度 0が最大
- 「Volume」… 音量調整
- 「Pitch」… 音声スピード調整
Audio Listener / オーディオリスナー
Audio Sourceがスピーカーの役割を果たすなら、Audio Listenerはマイクの役割をします。Audio Listenerはいたってシンプルで設定項目はありません。Inspectorから機能の有効・無効の選択肢のみです。もちろん無効にすると音を拾う事が出来ません。
デフォルトではMainカメラにこの機能がくっついています。基本一つのシーンに一つのAudio Listenerです。
Audio Listenerはコンポーネントなのでメニューから「Component」→「Audio」→「Audio Listener」から追加する事ができます。
ゲーム内ではプレイヤーが動きまわるという場合がわりと多いと思われるのでプレイヤーの耳として機能するようにプレイヤー自身にAudio Listenerを付ける場合もあるようです。
試しにAudio Listenerをオブジェクトに追加しようとすると「この機能はMainカメラで使用されているので追加できません」みたいなダイアログが表示されてしまいました。この場合は、MainカメラのAudio Listenerを無効にしてからだとオブジェクトにこの機能を付ける事ができます。
SEを再生する -スクリプト-
C#を使ってSE (Sound Effect/効果音) を鳴らすという事をしたいと思います。
と・・
その前に筆者はJavaを学習中の身なのでC#を知りません。C#がどのようなプログラミング言語なのかざっくり見てみましょう。
プログラミング言語・C#
C# (シーシャープ) は2000年にマイクロソフトが発表したプログラミング言語です。C++の拡張版でC++++ からの→ C#という表記になったと言われています。
C++の影響を受けながらJavaの影響を受けているのでもちろんオブジェクト指向プログラミング言語です。筆者が最初C#を見た時はJavaにそっくりだという印象が強かったです。
この2つの言語の違う部分の話は今回置いといて、クラス名や変数名の違う部分をまとめてみました。
C# | Java | |
クラス名 | PascalCase | PascalCase |
ローカル変数名 | CamelCase | CamelCase |
メンバ変数名 | CamelCase | PascalCase |
- 「CamelCase/ キャメルケース」… 複数単語の先頭を小文字にする 例… testHoge
- 「PascalCase/パスカルケース」… 複数単語の先頭を大文字にする 例… TestHoge
- 「SnakeCase/スネークケース」… 全ての文字列を大文字にする/複数単語の間に「_」を入れる 例… TEST_HOGE
他にも違う箇所はありそうですが使いながら覚えていくというスタンスでいいでしょう。
「Unity」スクリプトを使う
それではUnityに戻りましてC#を使ってみましょう。Unityでスクリプトを使うにはメニューから「Assets」→「Create」→「C# Scrips」(またはJavascript) を選択します。Unityでスクリプトファイルはアセットの扱いになるようです。
▼ファイル名はエディタを開く前にすぐ決めておきます。Projectタブ内にC#のファイルが出来ました。
Hogeファイルを選択した状態だとInspectorからスクリプトの内容が確認できます。このファイルをダブルクリックすると別画面にエディタが起動します。
using UnityEngine; using System.collections; public class Hoge : MonoBehaviour { void Start () { } void Update (){ } }
上のコードがデフォルトの雛型になります。MonoBehaviourというのはUnityにおいて全てのスクリプトのスーパークラスに位置します。Unityと連携するために用意されている存在です。
using UnityEngine; using System.Collections; public class TestClick : MonoBehaviour { public AudioClip se; void OnMouseEnter() { GetComponent<AudioSource>().PlayOneShot(se); } }
用意されているメソッドである「OnMouse」を利用しました。上記コードの「OnMouseEnter」では、例えば「キュィィン!」という効果音を用意したとするならばカーソルをコライダーの効いたオブジェクト上に合わせる度に「キュィィン!」と音が鳴るという処理です。鳴るのは一回ですがカーソルを合わせる度に何度も処理します。
「OnMouse」にはこれ以外にも色々な種類があります。一覧にしてみましょう。
OnMouseEnter | オブジェクトにカーソルを合わせると一回実行される |
OnMouseOver | オブジェクトにカーソルを合わせると繰り返し何度も実行される |
OnMouseDown | 左クリックすると一回実行される |
OnMouseDrag | 左クリックを押したままだと繰り返し何度も実行される |
OnMouseUp | 左クリックすると一回実行される & 左クリックを押したままオブジェクト外でボタンを離した時に一回実行される |
OnMouseUpAsButton | 左クリックすると一回実行される & 左クリックを押したままオブジェクト外でボタンを離した場合は実行されない |
OnMouseExit | オブジェクト内では実行されない & オブジェクト内からオブジェクト外に移動すると一回実行される |
これだけ効果音のバリエーションがあれば色々なゲーム内で活用できそうな感じです。
まとめ
Unityはノープログラミングでもゲーム制作ができるといわれています。Unityで自由度が高いゲームを色々作りたいというのであればスクリプトも使えるようになった方がいいかもしれません。
[ad2]
[ad3]