ホーム < ゲームつくろー! < Unity/サウンド編

サウンド編
その1 Unityのサウンドの根っこ


 ゲーム制作をしているといつも「音が入ると途端にゲームらしくになる!」と感動します。音はゲームを印象付ける極めて大切な要素だと再認識させられる瞬間です。

 そんな大切な要素「音」、Unityは簡単に鳴らす事が出来る仕組みが整っています。簡単なのですが、それ以上の所が無いのもまたUnity。そこで本編ではゲームで使えるサウンドシステムを考えてみます。

 何はともあれ、Unityでどうやって音を鳴らすかをざっと見て行く事にしましょう。



@ まずは音を用意

 音の素となるのはもちろんサウンドファイルです。UnityがサポートしているサウンドファイルのフォーマットはOggVorbisと非圧縮のwavです。mp3などもリソースとしてインポートできますが、時間かかるは劣化するはなので、なるべく対象フォーマットにした方が良いと思います。

 oggは圧縮されたファイルなので、再生時に展開が行われます。つまり再生にCPUのパワーを使うという事です。一方wavはそのままさくっと音を出せますが、容量が大きいためあまり長い音だとメモリをガッツリ食われます。以上の性質から、oggはBGMに、wavはSEに使う事になります。

 では実際にUnityに音を入れてみましょう。尚、今回使用した音はこちらのサイトから頂戴致しました:

 Wingless Seraph: http://wingless-seraph.net/
 BGM: Encount (Encounter_loop.ogg)
 SE: 回復 (kaifuku.wav)

ありがとうございます(^-^)。

 UnityのProjectウィンドウにファイルを直接ドロップするか、Assetsフォルダ以下にファイルを置くと、勝手にインポートされます。追加は極めて簡単です(^-^):

 上の黄色いアイコン、これは「AudioClip」と言います。AudioClipは音そのものを表しています。ただ、実はこのまま直には使えません。Unity上でサウンド(AudioClip)を扱うには、Audio系のコンポーネントにそれを渡す必要があるんです。



A 音を鳴らす人「AudioSource」

 AudioClipは、言うならばカセットとかCDとかDVDのような音楽メディアです。そういうメディアはプレイヤーが無いと音が鳴りません。Unityも同様でAudioClipを鳴らすためのプレイヤーが用意されています。それが「AudioSource」です。

 AudioSourceはコンポーネントなので、ヒエラルキ上のGameObjectに追加して使用します。これは例えば「キャラクタにくっつけてキャラの位置から色々なSEを出す」という概念なわけです。

 今はとりあえず音を鳴らしたいので、ヒエラルキに空のGameObjectを追加しましょう。メニューの[GameObject]→[Create Empty]で追加できます。名前は何でも良いのですが「AudioSource」としておきます。ヒエラルキにあるAudioSourceを選択した状態でメニューの[Component]→[Audio]→[Audio Source]を選択するとコンポーネントがGameObjectに追加されます:

AudioSourceをくっつけたGameObjectのInspectorはこんな感じになっています:

[Audio Clip]がもうありますよね。他にもいくつか項目があります。今はデフォルトのままで鳴らしてみます。

 [Audio Clip]の所にProject内にあるAudio Clip(Encounter_loop)をドロップします:

さ、これでGameを再生してみましょう。「♪♪♪♪〜〜」。軽快なBGMが再生と同時に鳴りました(^-^)。

 次はSEの方です。ヒエラルキにもう一つ空のGameObjectを追加して「AudioResourceSE」という名前にします。全く同様にInspectorのAudio ClipにProject内のAudio Clip「kaifuku」をドロップしてGameを再生してみます:

「ピュロリロリ〜(SE)」「♪♪♪♪〜〜(BGM)」とSEとBGMが同時になりました。こんな感じで、ヒエラルキ内にAudio ClipがついたAudio Sourceを置くと、置いた分だけ音を鳴らす事ができます(Play On Awakeがオンの時)。ただ鳴らすだけなら至って簡単です。

 所で、上の図内の「This is a 3D Sound.」という表記。これ、とても面白いんです。実は、先程鳴っていた音は「3D空間」のある位置で鳴っているんです。音が発生位置を持っているという事は、場所によって聞こえ方が変わるという事です。では、いったい誰が聞いているのか?それがUnityのAudio系のもう一人「Audio Listener」です。



B 音を聞く人「Audio Listener」

 先程鳴った音。実はヒエラルキにいる音を聞く人である「Audio Listener」が聞いた音なんです。UnityはデフォルトでMain Cameraさんがヒエラルキにいますが、このカメラにAudio Listenerコンポーネントが最初から付いているんです:

 どうしてカメラに付いているか?これはUnityが3D空間を歩き回るようなゲームを想定しているためです。例えばゲーム内で敵キャラがうろうろしているとします。敵キャラに足音のSEを付けておくと「ざっくざっく」とその位置から音が鳴ります(音源)。一方、カメラは大抵自キャラの背後について回るか、FPSならカメラ自体が本体とみなされるため、これを聞く人にすると、敵に近付くほど足音が大きくなるわけです。

 実際に先程のBGMやSEが付いたAudioSourceを原点に置いて、カメラを原点近くにすると音が大きく:

でか!(音が)。ちょっとびっくりしました。次は引いてみます:

うんと音量が小さくなりました。前後だけでなく左右に振るとちゃんとステレオになります。それだけでなく、何と音源の位置に向かって速く進むと音が高くなり、通り過ぎるとピッチが下がるドップラー効果までシミュレートしてくれます!面白〜い!

 ただ、SEのドップラー効果は良いとして、BGMまでピッチがふにゃんとなるととても変ですよね。BGMはいつでも一定の音量で鳴って欲しいわけです。そこで、BGMは3Dサウンドにしないようにします。これは元リソースであるAudio Clipに設定があります:

 [3D Sound]のチェックを外します。そしてInspectorの下の方にある[Apply]をクリックして設定を確定します。これでサウンドは2Dサウンドとなり、カメラの位置に関係なく一定音量で鳴るようになります。

 このように、ヒエラルキベースの静的な状態なら、音を鳴らすのも聞くのもとても簡単です。ただ、ゲームは始まった瞬間に音が鳴る物ではありませんよね。むしろ絶妙なタイミングで音が鳴る事で没入感が生まれるわけで、「特定のタイミングで音を鳴らす」という事が出来ないといかんわけです。それをどうやるのか?次章からじっくり考えてみましょう。