今日のUnity (6) 大砲発射
今回は積み上げたブロックに対して砲弾を発射してみた。最初のマイルストーンとしてこれを作るのが目標だったんだよね。物理エンジンの面白さがよくわかる例かも。マウスをクリックするとマウスカーソルがある位置に砲弾を発射する。発射音が壮大に鳴るので音量に注意!
実行してみるとわかるけどあまりリアリティが感じられない。たぶん、ブロックの形がそのままで破壊できないからかもしれない。
ブロック(Brick)
- 壁を構成するブロック。
- 大きさは (1, 1, 1)、1立方メートルなのでかなり巨大なブロックかも。
- 物理挙動を示すようにRigidbodyを追加。
- 質量は100kgにセット。
- レンガのテクスチャを貼り付けたマテリアルを追加。
レンガのテクスチャは、CGTexturesから借りた。大量のテクスチャがあるのでおすすめ。このブロックはあとでたくさん作るのでPrefab化しておく。
ブロックを積み上げて壁を作る
ブロックを自分で積み上げていくのは非常に大変なのでスクリプトで積み上げた。下のスクリプトをWallSourceという空のオブジェクトに貼り付けておくと起動時、WallSourceの場所に壁が現れる。積み上げたときに物理挙動で少しはずんでしまうのなんとかならないかな?隙間が見えてしまうのもちょっといただけない。
砲弾(Shell)
- 大きさは (1, 1, 1)、ブロックと同じサイズ。
- 物理挙動を示すようにRigidbodyを追加。
- 質量は500kg、鉄なので重くした。
- 黒く塗ったSpecularのマテリアルを追加して金属感を出した。
- 大砲から発射するときにインスタンス化するのでこれもPrefab化。
- 地面から落下したらオブジェクトが削除されるようにRigidbodyの生成(2014/7/29)でBallにつけたBallLife.jsをつけておくとよい。
大砲(Artillery)
- 空のゲームオブジェクト、筒にしても良かったかも?
- マウスクリックしたときにここからマウスカーソルの位置に砲弾を発射する。
- 大砲自体はカメラと同じ位置に配置。
- 以下のスクリプトを追加。インスペクタから
shellObject
に砲弾のPrefab、bombにインポートした音声ファイルをセット。
発射音の再生
- 音声ファイルは、Javaでゲーム作りますが何か?の大砲発射に含まれるbom.wavを使用。WAVEファイルをAssetsにドラッグアンドドロップすれば自動的にインポートされる。
- 砲弾を発射したときに音を出したいので大砲にAudio Sourceを追加。
Add Component > Audio > Audio Source
で追加できる。ここで、Audio SourceのAudio ClipはNoneのままにしておく。ここに音声ファイルをセットしてしまうと起動時に再生されてしまうので注意。今回はマウスクリックで発射したときに鳴らしたいのでNoneのまま。 - スクリプトから効果音を鳴らしたいときは、
audio.PlayOneShot()
を使う。 - 再生した音を聴くAudio Listenerというオブジェクトも必要。今回はデフォルトでMain Cameraについているものをそのまま使用。大砲はカメラと同じ位置にあるので間近で「どかんどかん」鳴ってとてもうるさい(笑)
参考
- 実行時のプレハブのインスタンス化 - スクリプトからブロックを積み上げる方法
- 製作6時間!Unityで撃ちまくり系ミニゲームver2を作ったので手順を公開! - マウスカーソルの位置に弾丸を発射する方法