Unity は各種のオーディオデータ形式に対応している(例:wav, aiff, mp3)。最も無難なのは wav 形式を使うこと。専門の人に制作を依頼する場合は「wav 形式の 16 bit / 44.1 kHz のリニア PCM」と指定すればよい。
例のごとく、ファイルを Project ビューにドラッグ&ドロップするだけでインポートは完了する。
インポートしたオーディオデータ(Unity では “Audio Clip” と呼ばれる)を選択すると Inspector に次のような項目が表示される。
“Audio Format” は Unity 内部でオーディオデータをどのような形式で保持するか設定するもの。 “Native (WAV)” は非圧縮で保持することを意味する。音質は良いがデータ容量はかなり大きくなる。これを “Compressed (OGGVORBIS)” に変更すると圧縮して保持されるようになる。音質は若干落ちるがデータ容量は小さくなる。
“3D Sound” はカメラと音源の相対関係によって音の低位(ステレオ位置)や音量を変化させるというオプション。主観視点のゲームを作るには便利なオプションだが、客観視点のゲームではかえって邪魔になることもある。
今回は次のように設定しておこう。
項目を変更したあとに Apply ボタンを押さないと適用されないので注意。
大砲が弾を発射するときに音を鳴らすようにしてみよう。
音を鳴らす機能は AudioSource コンポーネントに実装されている。これを音を鳴らすゲームオブジェクトに追加しよう。ここでは Launcher ゲームオブジェクトに追加すればいいはず。Launcher ゲームオブジェクトを選択したのちにメインメニューの Component → Audio → Audio Source を選択する。
AudioSource コンポーネントには様々なオプションがあるが、ここではごく一部だけを解説する。まず “Audio Clip” は、この AudioSource で鳴らすオーディオクリップを指定するもの。オーディオクリップ Fire をドラッグ&ドロップで設定しよう。その少し下にある “Play On Awake” は動作開始直後に自動的に鳴らすためのオプション。ここではスクリプトの制御によって鳴らしたいので、このスイッチは外しておく。
AudioSource の設定が完了したら、次は Launcher スクリプトに音を鳴らすための処理を追加する。次のようにボタン押下によって弾丸を生成している部分があると思う。
if (GUI.Button(Rect(0.75 * sw, 0.85 * sh, 0.2 * sw, 0.1 * sh), "FIRE!")) {
var shell : GameObject =
Instantiate(shellPrefab, transform.position, Quaternion.identity);
shell.rigidbody.velocity = transform.up * power;
}
ここに次の一行を追加する。
audio.Play();
これで AudioSource コンポーネントの Audio Clip に設定されたオーディオクリップが再生される。
同じようにして目標を破壊したタイミングでも音が鳴るようにしてみよう。
BGM を鳴らすのはもっと簡単にできる。
これだけでいい。あとは “Play On Awake” スイッチの機能により、勝手に再生が開始される。
Unity は様々なファイル形式に対応しているが、3D モデルを扱うのに最も無難なのは FBX 形式だと言われている。この授業でもデータの受け取りは FBX 形式で行うようにしよう。
サンプルデータの中には次のファイルが格納されている。
基本的には例のごとくドラッグ&ドロップするだけでインポートできるが、この場合は2つのファイルを同時にドラッグ&ドロップするのが良い。そうすることでマテリアルに対するテクスチャの設定までを自動的に行ってくれる。
ゲーム業界では Maya や 3D Studio Max といったツールがよく使われる。国内では XSI を使っているところもある(最近はちょっと少数派)。これらのツールは効果なので、プログラマーが使うツールとしてはあまりすすめられない。
国内で安価に使えるモデリングツールとしてはメタセコイアが有名。でも Unity ではメタセコイアのファイル形式を直接に使うことはできない。プラグインを使って fbx 形式に変換する必要がある。
Mac の場合は Cheetah3D が安価で使いやすい。
Windows / Mac の両方で使えるフリーのツールとして Blender があるが、かなり特殊な設計思想を持ったソフトであり、正直なところあまりすすめられない。
インポートした FBX ファイルはプレハブと同様の扱いになる。シーン中に配置するには、これを Hierarchy ビューにドラッグ&ドロップするだけでよい。
実際に配置してみると、モデルが恐ろしく小さいことに気付くと思う。これは FBX ファイルのインポート時に 0.01 のスケールが適用されている事に起因する(不思議だが諸々の事情により 0.01 がデフォルト値になっている)。これを 1.0 にすれば本来のスケールに直るはず。
Project ビュー上の FBX ファイルを選択すると Inspector 上にインポーターのオプションが表示される。
ここにある “Scale Factor” がインポート時のスケールを操作するオプション。これを “1” に直して Apply ボタンを押せば本来の大きさになる。
Unity にはメッシュ(平たく言うとポリゴンモデルのこと)にコリジョンを付けるための仕組みとして Mesh Collider コンポーネントがある。しかし、この Mesh Collider は基本的に静止物にしか使えない。
このポリタンクのように動き回る物体にコリジョンを付けるには Box Collider や Sphere Collider を使う必要がある。例えば次のように箱で大まかに括ってやれば、それなりにリアルな動きをするはず。
あるいは、次のように複数の箱を組み合わせて形状を作るのでもよい。この場合、モデルがあるゲームオブジェクトの子の構造として複数のゲームオブジェクトを持つことになる(Rigidbody は親側に付けること)。
Box Collider の形状を調整するには、Box Collider コンポーネントのパラメーターにある Center や Size を使う。 Shift キーを押しながら緑の枠をドラッグすることでも調整可能。
以前の授業で配布した CommonAssets の中に Quad.fbx というモデルが含まれている。これは単なる板きれのモデルで、 2D 表示を行うために用意したもの。
このモデルにテクスチャを貼付ければ 2D 表示として使うことができる。例えばタイトル画面の表示とか、背景の一枚絵の表示などには、このモデルを使おう。
なおこのような 2D 表示を行う場合、たいていライティングは不要になる。ライティングを行わないようにするには、マテリアルのシェーダーとして “Unlit/Texture” を使えばよい。また、ライティングを無効にしつつ透過させるには “Unlit/Transparent” を使う。
ここは余裕があれば解説します。
今後はチーム毎の制作実習に移行する。制作を進めていくにあたって、常に最新状態のビルドをサーバーにアップし続けてもらいたい(毎週の授業の終わりにアップするのが理想)。これにはチーム内における情報共有を実現するという目的のほか、講師・教員側での現状確認を可能にするという目的もある。もちろん評価にも使う。
提出場所は以下の通り。
\\10.25.30.90\Public\チーム制作2011_1年次
ここに Web Player 用のビルドを格納する。なお Build Settings において Offline Deployment をオンにしておくのがベター(無くてもなんとかなるが)。