2013年5月22日水曜日

Unityの公式チュートリアルの非公式続編「ゲームルールを!!」 その3

前回、ボールがブロックに衝突した際にブロックが消えるようにしました。

今回は、すべてのブロックが消滅した際にゲームを初期化するようにしたいとおもいます。



Project ビューで右クリック → Create → javascript を選択し javascript を作成します。
ファイル名は僕は clear としております。

作成したファイルをダブルクリックするとエディタが開くので以下のように記載します。




private var blockcount : int; //ブロックの設置数

function Update () {
blockcount = GameObject.FindGameObjectsWithTag("Block").Length;
if( blockcount == 0){
Debug.Log("Cleared");
Application.LoadLevel("TheGame");
}
}

最初に宣言している変数はシーン内に設置されているオブジェクトの数をカウントする為の変数です。
頭についている private を記載することで Inspector ビューで変数を表示しないようにしています。
理由は、スクリプト内でしか使わず Inspector ビューで変数の中身を変更しない為です。

次に update クラスの頭、 blockcount ~から始まる文はゲーム内に存在している Block タグを着けられているオブジェクトの数をカウントしそれを変数に代入しています

その次の if 文は上記でカウントしたオブジェクト数が 0 の時(すべて消された時)に
Debug.Log 文でコンソールに Cleard と表示させ
そのした Application.LoadLevel で新しいシーンを呼びだしています。
今回は、他にシーンが無いため自分を再起しています。




続いて上記で作成したスクリプトをゲーム内に反映させたいと思います。

まずメニューバーの GameObject → Create Empty を選択し、空のゲームオブジェクトを作成します。名前は僕は GameRule しています。

これに先ほど作成した、スクリプト clear をドラックアンドドロップで GameRule オブジェクトに関連付けしています。

それは実行してみて、すべてのブロックが消された時正しく初期化されているか確認してください。





2013年5月16日木曜日

Unityの公式チュートリアルの非公式続編「ゲームルールを!!」 その2

ブロックを画面に設置したので、ボールがブロックに衝突した際に
消えるようにしたいとおもいます。

では、まず最初に作成したブロックにタグをつけたいと思います。



タグを追加したいと思います、追加方法は Edit → Project Settings → Tags を押すと


Inspector ビューに TagManager が表示されるので Tags の三角をクリックすると
Size とか Element 0 とかが表示されるので Eement 0 の右側に入力項目があります。
今回は Block と追加してます。

追加したタグを前回作成したブロックプレハブに設定したいとおもいます。


ブロックプレハブを選択し Inspector ビューの名前の下に Tag の項目をクリックすると
色々項目が出てきますが、先ほど追加した Block を選択します。

すると Hierachy ビューにあるプレハブから作成したブロックの Tag も Block に変化しています。

ブロックをわざわざプレハブにした理由です、プレハブを使って作成するとプレハブの情報を
引き継いで作成されますが、作成後プレハブの設定等を変更した場合でも情報更新されるので
同じ役割を持つオブジェクトを作成する場合はプレハブを使用した方が更新等が楽になります。

次はめんどさくいコードを書きます.

Project ビューで右クリック → Create → javascript を選択し javascript を作成します。
ファイル名は僕は ball としております。

作成したファイルをダブルクリックするとエディタが開くので


function OnCollisionEnter(collisionInfo : Collision){
if(collisionInfo.gameObject.tag == "Block"){
Destroy(collisionInfo.gameObject);
}
}

と書き足してあげてください。

ちなみに、新規で javascript を作成した場合、start 及び update 文が書かれていますが、
消さなくても消しても動きます。(僕は不必要な物はなるべく書かないようにしてるので消してますが)

内容としてましては、OnCollisionEnter 文は関連付けされたオブジェクトが別のオブジェクトと衝突した際に呼び出される関数で、最初の if 文で衝突した対象のタグを見て "Block" かどうか判断し
その後、該当するオブジェクトであれば Destroy 文で対象のオブジェクトを削除しています。

特にコンパイルエラーが出ていなければ、Inspector ビューの ball にドラックアンドドロップしてみましょう。

ball にスクリプトを関連付けたら実際に動かしてみましょう、ボールがブロックにぶつかると消える
ようになってます。






 










Unityの公式チュートリアルの非公式続編「ゲームルールを!!」

壁やボール、ラケット等の部分は公式チュートリアルの「骨格」を作ろうの章で紹介されているので
その続きのゲームルールの部分を作っていこうと思います。

まず、ブロック崩しなので崩すべきブロックを作成していこうと思います。

最初の章では壁をひとつ作成しそれをコピーして作っていってましたが、
Unityでは「プレハブ」という機能があるので今回はそれを使って
ブロックの部分を作成していこうと思います。

では最初に、元なるオブジェクトを作成します

メニューの GameObject → Create Other → Cube を選択し、四角いブロックを作成します


作成したブロックのInspectorの内容はこんな感じ
たくさん並べるために少し小さめにしてます。

続いて、プレハブを作成します



Project ビューで右クリックでメニューを開き、Create → Prefab を選択します




すると、New Prefab と言う名前で作成されますので今回はプレハブ名を「Block」としておきます。
作成したプレハブに先ほど作成した Cube をドラックアンドドロップします。



ドラックアンドドロップすると、プレハブのアイコン色が白から青に変わります。
変わるのを確認したら、ドラックアンドドロップした Cube は削除してしまいましょう。

つづいて、作成したプレハブを今度は Hierarchy ビューにドラッグアンドドロップしてみましょう。



すると、Block という名のオブジェクトが Hierarchy ビューに作成(インスタンス化)されます
この時プレハブから作成されたオブジェクトは名前の色が青色になります。

作成された事を確認できれば、ブロック崩しなので何個か作成してみましょう。




僕はこんな感じで作成しました。

実際に動かしてみてください、ブロックに衝突してもブロックは消えません。

次は、ボールがブロックにぶつかった際にブロックが消えるようにしたいとおもいます。





Unityの公式チュートリアルの非公式続編

公式のチュートリアルがなかなか更新されないので
勉強がてら、作ってみようとおもいます。

僕自身、Unityは初心者なのでつくり方が下手くそで見るに耐えないかもしれないですが
ご了承ください。

ちなみに環境は windows でスクリプトは javascript で書いてます。