Unityちゃんの爆破ゲームを作ろう

2014年11月20日(木)
薬師寺 国安

スクリプトの記述

まず、「Hierarchy」から「unitychan」を選択し、「Add Component」から「New Script」を選択し、「Name」に「UnityChanExplode」、「Language」に「Java Script」を指定して、「Create and Add」をクリックします。すると「Inspector」内に「Unity Chan Explode(Script)」が追加されます。「Script」の「UnityChanExplode」をダブルクリックしてMono Developを起動して、リスト1のコードを記述します。

Unityちゃんが体当たりしマウスの左クリックが押された時に爆発する処理(UnityChanExplode.js)

01//#pragma strict                                (1)
02static var no:int;
03function Start () {
04  no=6;                                 (2)
05}
06 
07function OnControllerColliderHit(hit:ControllerColliderHit){
08 ObstacleCheck(hit.collider.gameObject);        (3)
09}
10 
11function ObstacleCheck (obj:GameObject) {
12 var msg=GameObject.Find("msg");              (4)
13  if(Input.GetMouseButtonDown(0))               (5)
14  {
15    if(obj.name==”Cube1”){
16    obj.gameObject.GetComponent(“Detonator”).Explode();
17    no--;                                       (6)
18    }
19 
20    if(obj.name==”Cube2”){
21    obj.gameObject.GetComponent(“Detonator”).Explode();
22    no--;
23    }
24 
25    if(obj.name==”Cube3”){
26    obj.gameObject.GetComponent(“Detonator”).Explode();
27    no--;
28    }
29 
30    if(obj.name==”Cube4”){
31    obj.gameObject.GetComponent(“Detonator”).Explode();
32     no--;
33    }
34 
35    if(obj.name==”Cube5”){
36    obj.gameObject.GetComponent(“Detonator”).Explode();
37     no--;
38    }
39 
40    if(obj.name==”Cube6”){
41    obj.gameObject.GetComponent(“Detonator”).Explode();
42     no--;
43    }
44 
45    msg.guiText.text=”残り:”+no.ToString();       (7)
46 
47    if(no==0)                                   (8)
48    {
49    yield WaitForSeconds (5.0);
50    Application.LoadLevel(Application.loadedLevel);
51    }
52 }
53}
  1. C#のコードをJava Scriptから使用しているため、#pragma strictの宣言があるとエラーになるので、コメントアウトで外しています。
  2. 静的変数noを宣言し、Start関数内で6に初期化します。
  3. OnControllerColliderHitイベントで、プレイヤーがCubeに衝突した時の処理を記述してあるObstacleCheck関数を実行します。
    ObstacleCheck関数内では以下の処理を行います。
  4. msgというGameObjectをFindで見つけ、変数msgに格納しておきます。
  5. Input.GetMouseButtonDown(0)でマウスの「左」ボタンがクリックされた時の処理を記述します。
  6. プレイヤーが各Cubeに衝突してマウスの「左」ボタンがクリックされた時は、該当するCubeが爆発します。そして変数noの値は1減少します。
  7. Cubeの残り個数を表示します。
  8. 変数noの値が「0」なら(つまりCubeの残りが「0」なら)、5秒待って、最初の画面に戻ります。

次に、「Hierarchy」内の「TimeText」に追加している「myTimeScript」を記述します(リスト2)。

経過時間を表示する処理(myTimeScript.js)

01#pragma strict
02static var time:float;                  (1)
03function Start () {
04time=0;
05}
06 
07function Update () {
08 if (UnityChanExplode.no>0)
09 {
10  time+=Time.deltaTime;         (2)
11 }
12 var now:int=time;                      (3)
13 guiText.text="<Color=red>TIME:" + now.ToString()+"</Color>";
14}
  1. 静的変数timeを宣言し、Start関数内で「0」で初期化しておきます。Update関数内で以下の処理を行います。
  2. UnityChanExplodeスクリプト内に記述した静的変数noが0より大きかった場合は、つまりCubeが残っている間は、経過時間を表示します。
  3. 変数nowに経過時間を代入し、guiText.textに経過時間を「赤」で表示します。

以上で全ての設定が完了しました。Unityメニューの[File]ー[Save Scene as]と選択して「Unityちゃん爆発」という名前で保存しておきましょう。

プレイ画面で実行すると動画1のようになります。

今回は、「Cube」に貼り付ける「Texture」には「Import」したコンポーネントがデフォルトで持っているものを使用しました。「Texture」は「Asset Store」でいくらでもダウンロードできますので、その場の雰囲気に合った「Texture」を使用すると、もっと画面が引き締まるかもしれません。今回はこれで終わりです。爆発のゲームは迫力がありますね。

次回は、いよいよ最終回です。マシンガンを連射するサンプルを紹介します。お楽しみに。

薬師寺国安事務所

薬師寺国安事務所代表。Visual Basic プログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。
1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。1997年に薬師寺聖とコラボレーション・ユニット PROJECT KySS を結成。2003年よりフリーになり、PROJECT KySS の活動に本格的に参加、.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。Windows Phoneアプリ開発を経て、現在はWindows ストア アプリを多数公開中

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています