Unity4入門という書籍を買ったので、早速クソゲーを作ってみた!【後編】
とりあえず前回までに、ブロック崩しの見た目と、ボールが落ちたらゲームオーバーになるところまで完成しました。
今回は、ゲームのルール作りと、ブロックが消えたら爆発する仕掛けと、効果音を付けてひとまず遊べるところまで作って完成としたい…。
ひとまず、ブロックが消えるようにする!
今のままだと、ブロックにボールが当たっても消えないので、まずは消えるようにしてみます。
そのために、ブロックのオブジェクトへスクリプトを追加します。
function OnCollisionEnter ( collision : Collision ) {
GameObject.DestroyObject ( gameObject );
}
これで、ボールが当たったらブロックが消えました。
前回は、「OnCollisionEnter」で一番下のブロックに当たったらボールを消すという事をしましたが、それのブロック版がコレになります。
ちなみに、Destroyする時に「collision.gameObject」とするとボールの方が消えてしまうので注意。(私はこれで30分くらい悩みました…)
単純に消えるだけだと、なんだかとっても寂しかったので爆発させるようにしてみました。
これも書籍を参考にして、先程のスクリプトにこんな感じで追記してます。
var particle : GameObject;
function OnCollisionEnter ( collisionInfo : Collision ) {
GameObject.DestroyObject ( gameObject );
var clone : GameObject = Instantiate ( particle, transform.position, transform.rotation ) as GameObject;
yield WaitForSeconds(1);
GameObject.DestroyObject ( clone );
}
スクリプト冒頭に、「particle」というGameObjectの変数を指定してやる必要があるのと、Instantiateという命令で別のオブジェクトを生成してます。
要するに、ブロックをまず消してから、その場所に爆発エフェクトのオブジェクトを表示して1秒後に爆発エフェクトを消す!という処理になってます。
それと、当然ながら爆発エフェクトを設定する事もお忘れなく。
爆発エフェクトは、Unityメニューから「Assets」⇒「Import Package」⇒「Particles」をインポートすれば使えるようになります。
で…、
出来たのがこんな感じ。
おっ!なんか良い感じ。
ほんのちょびっとだけ、ゲームらしくなった気がする…。
効果音をどうしても付けたかった!
せっかく爆発するようになったので、「ボーン!」という効果音を付けたくなりました!
なので、前回同様にUnity搭載のAssetStoreから、無料の「効果音セット」をインポートしました。
こちらのセットは、爆発系のサウンドがいろいろ入っているので便利です。
で…、
音を入手したので、さっきのスクリプトにサウンドを鳴らすスクリプトを追加。
var particle : GameObject;
var shot : AudioClip;
function OnCollisionEnter ( collisionInfo : Collision ) {
audio.PlayOneShot ( shot );
GameObject.DestroyObject ( gameObject );
var clone : GameObject = Instantiate ( particle, transform.position, transform.rotation ) as GameObject;
yield WaitForSeconds(1);
GameObject.DestroyObject ( clone );
}
効果音の場合は、「PlayOneShot」を使うのが良さそうです。
あとは、スクリプトにAudioClipを設定して、ブロックオブジェクトにAudioSourceコンポーネントを追加したら完了!
これで、音が鳴るはず………。
…が、鳴らない!
なんで〜!?
設定をいろいろ見直して格闘すること2時間…。
まったく意味不明なので、ブロックじゃなくてボールのオブジェクトに効果音を鳴らすスクリプトを追加してみました。
var shot : AudioClip;
function OnCollisionEnter ( collision : Collision ) {
if ( collision.gameObject.tag == "Block" ) {
audio.PlayOneShot ( shot );
}
}
ボール側でブロックに当たったことを判断させるために、ブロックオブジェクトにタグを付けました。(こうしないと、壁にぶつかっただけで効果音が鳴ってしまう)
これで実行したら、上手く効果音が鳴るようになりました。
なぜブロックだと鳴らなくて、ボールだと鳴るのか…結局よく分からず…。もしかすると、ブロックはプレハブで作っていたのが、何か要因なんだろうか。(分かる方いたら、コメントくださいませ!)
ブロックを全部消したら終了させる!
これで、ほぼゲームらしく遊べるようになったので、あとはブロックが全部消えたところで、ゲーム終了にしてみる。
ボールが一番下の外枠に当たったら消える処理を書いたスクリプトに、以下を追記。
function Update () {
if ( blockdes.count > 20 ) {
gameover = true;
}
}
staticで指定したcount変数を、ブロックが消える度にカウントアップさせて、上記スクリプトで20個消えたかどうかを判定させてます。(blockdesは勝手に決めた名前のスクリプト名です)
20個になったら、ゲームのスイッチである「gameover」をtrueにして終了という感じ。
これで、なんとかゲームは完成です…。
ちなみに、コードを書いている時に、何度もお世話になったのが公式のスクリプトリファレンスでした。分からないコードを、そのまんま検索ボックスに入れると、何のコードなのか?を辞書みたいに使えます。
個人的に便利でした。ほとんど、日本語で解説があるし…。
★前編の記事はこちら!
Unity4入門という書籍を買ったので、早速クソゲーを作ってみた!【前編】 - Unity不定期便
今回、参考にした書籍!