nagano

2014.05.08

Unity 4.3を触ってみる2

こんにちは。システム部の長野です。

今回も前回に引き続きUnityネタで行きます。
今流行の鳥を飛ばして障害物を避けていく某人気ゲームのようなものを作ってみました。
(既に出尽くした感満載ですが、、)

サンプル

※閲覧するにはUnity Web Playerのインストールが必要です。

ゲーム説明

・スタートを押すとボールが落下します。
・画面をクリックするとボールが少し浮きます。
・障害物にあたるか地面に落ちるとゲームオーバーです。
・障害物を避けると1点です。

スクリプト解説

今回書いたスクリプトは二つです。

progress.js・・・ゲームの進行等、あたり判定以外のすべての処理。progressオブジェクトに割当てています。

tama.js・・・・・あたり判定処理。playerオブジェクトに割当てています。

プロジェクト構造は以下のキャプチャを参照ください。untitle_unity_-_2dnotest_-_Web_Player

progress.js

tama.js

スタートボタン

OnGUI()内でGUI.Button()を呼ぶとボタンが表示されます。
playingでプレイ中かを判断し、プレイ中は表示しないようにしています。
スタートボタンをクリックしたらゲーム初期化用のinitGame()を呼んでいます。

ゲーム初期処理

playerはインスペクタ側であらかじめ玉のオブジェクトに割り当てられています。
この玉のX、Y位置とz回転を0で初期化し、玉を初期位置に配置させています。

このrigidbody2D.WakeUp()で重力等の物理モードをオンにしています。

フレーム処理

ここではマウスクリック処理、フレーム毎の処理、ゲーム停止中の処理を書いています。

マウスをクリックしたとき、玉に対して上方向に200の力を加えています。

フレーム毎に障害物(barrier)を左に動かしています。
画面の左端まで行ったらスコアを加算させて、

で右端に戻しています。
そのときにY軸をランダムにすることで障害物の穴の位置を微妙に変化させています。

障害物に当たったときにplayingがfalseになり、
その場合はスタートボタンの入力待ちになるため物理モードをオフにします。

あたり判定処理(tama.js)

OnCollisionEnter2D()で自身に別のオブジェクトが衝突したときを判定しています。
この関数を呼ぶだけで、障害物や地面に当たったときの判定が取れます。
この中ではprogress.jsのplayingをfalseにしています。

最後に

解説は以上になります。
重力周りや当たり判定が簡単に実装できるので
少ないスクリプトで面白いゲームが色々作れそうですね!

このブログを書いている時点でUnity5の予約も始まっており、
Unity5はWebGLに対応しているということなのでいつかこのブログで書きたいです。