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