Unity不定期便

Unityエンジンを使って、いろいろ勉強したことをメモ代わりにまとめてます。

Unity4入門という書籍を買ったので、早速クソゲーを作ってみた!【前編】

f:id:masatolan:20131117120806j:plain

去年くらいから、ちょっと気になっていた「Unity」という無料の3Dゲームエンジン…。

バージョンが4になって以降、iPhone/Androidの書き出しが無料になり、3Dアニメーションも簡単に作れて、最新版では2Dゲームも標準で作れることになりました。

 

そんな情報を聞きつつ、気持ちが高ぶっている状態で、ある日…以下のようなYouTube動画を見てしまった。

今までも、Unity関係の動画はいろいろあったのだけど、日本語で「番組」というカタチで進行する動画は初めて見たのです。

 

そして、動画内で紹介されているUnity本を、思わずポチってしまったわけです。

Unity4入門   最新開発環境による簡単3Dゲーム製作

Unity4入門 最新開発環境による簡単3Dゲーム製作

 

 …のせられるがままに、本を買ってしまった。

 

でも、せっかく買ったわけだし、前からUnityに興味もあったので、早速読んでみた。

で…、

感想として、スクリプトの解説が少ないこと以外は、なかなか面白くて分かりやすくまとめられていると感じました。Amazonの評価もまずまずのようで…。

 

何よりも、素人の私でも内容が理解できたのが嬉しかった…。

とりあえず、本に書いてある通りに実行して、スクリプトはそのまま丸写し、そしてだいたいの操作方法とUnityの機能を広く浅くゲットしました!

 

とりあえず、チュートリアルをやる!

ひと通りザクッと本を読んだところで、Unity公式サイトにあるブロック崩しのチュートリアルをやってみました。

f:id:masatolan:20131117123258j:plain

 全部日本語で書かれており、かなり詳しいです。

これがあるなら、本はいらなかったのでは?と思ったが、第2回以降がまったく更新されてない…。(2014年1月時点)

しかも、第1回のチュートリアルでは、ブロック崩しの骨組みだけしか紹介されてないので、続きは自力でやるしかない…みたい。

 

とりあえず、第1回のチュートリアルで作れるのは、ここまで。

f:id:masatolan:20131117123736j:plain

ブロック崩しの枠と、ラケット、ボールを作って、ボールは勝手に動いている状態で、ラケットを操作して打ち返す…という機能だけ。

これだとゲームとは言えないし、第2回以降がいつ更新されるか分からないので、購入した書籍とGoogle様のちからを借りて、続きをやってみました!

 

クソゲーブロック崩し」を作る!

とりあえず、見た目を少しそれらしくしたかったので、書籍に書かれていた通りUnityに搭載されている「Asset Store」から、テクスチャをインポートしてみました。

f:id:masatolan:20131117141454j:plain

意外に無料のものが多いことに驚きながら、ブロック崩しの壁やラケットなどにテクスチャを適用!

 

あと、適当にブロックを配置して「ブロック崩し」に見えるようにしてみたのがこちら!

f:id:masatolan:20131117141736j:plain

もの凄い「クソゲー感」が漂ってますが、練習ということで…。

背景は、メインカメラの色を変えると変わります。それと、カメラの位置を少し前にして、一番下の外枠が見えないようにしてます。

 

次に、ボールが一番下に落ちたらゲームオーバーになるようにしてみました。

そこで、外枠の一番下に位置するオブジェクトに、書籍の例題を少しいじったスクリプトを貼り付けます。

function OnCollisionEnter ( collision : Collision ) {
    
 	GameObject.DestroyObject ( collision.gameObject );
 	gameover = true;
 	 	
}

「OnCollisionEnter()」というファンクションで、「何かが当たったら〜何かをする」みたいな処理ができるので、ブロック崩しで言えば「一番下のブロックにボールが当たったら…」という処理に使えそう。

とりあえず、今のところ当たるものがボールしかないので、このスクリプトでやってみました。

処理内容は、当たりに来たオブジェクト(ボール)を消して、gameover変数のスイッチをtureにするというもの。

gameoverの変数は、冒頭に「boolean」で指定してます。このスイッチを切り替えることで、「ゲーム中」と「ゲーム終了」を区別できそう。

 

で…、

もう1つ下に、別のファンクションを書きます。

function OnGUI() { 
   if ( gameover ) { 
      GUI.Label ( Rect ( Screen.width / 2 -120, 250, 200, 30 ), "GAME OVER" , style ); 
      if ( GUI.Button ( Rect ( Screen.width / 2 -100, 200, 200, 30 ), "Retry!" ) ) { 
          Application.LoadLevel ( Application.loadedLevel ); 
          } 
      } 
    }

 

これで、ボールが一番下に落ちた時点で画面に「GAMEOVER」と表示されて、もう一度プレイするか?のボタンが現れます。(ボタンを押すと、最初からプレイできる)

f:id:masatolan:20131117143038j:plain 

とりあえず、それらしくなってきたところで、ブロックを消したり、効果音を付けたり、エフェクトを入れたりなどなど…、まだまだやりたいことがあるので【後編】で続きを書きます!

 

今回、参考にした書籍!
Unity4入門   最新開発環境による簡単3Dゲーム製作

Unity4入門 最新開発環境による簡単3Dゲーム製作