Unity5.0.0f4 Personal(2015年5月)
前回の続きです〜
今回は、定期的にひよこ前方に障害物を作る機能を作り、ぶつからないようにくぐり抜けるようにしましょう〜
【目標】前方に障害物を作成する!
【課題1】障害物のPrefabを作成する
まずは障害物のPrefabを作成しましょう〜Prefabの作り方については下記エッセンスをご参照下さい〜
Prefabの元となる画像はこちらをお使い下さい〜
木です
こちらの画像をダウンロードし、ProjectビューへImportして下さい〜
ドラッグ&ドロップ!
今回Sprite画像は分割しないで使ってもらって大丈夫です〜treeのSpriteオブジェクトを2つ作りましょう〜名前はtree1とtree2にします〜
ドラッグ&ドロップ!*2
そしたら空のGameObject(名前:tree)を作成し、その中にtree1とtree2を入れます〜
空オブジェクト作成
tree(空オブジェクト)の中にtree1、tree2を配置
次にtree1とtree2のSorting Layerの設定を行います〜背景よりは前面に出ていて、地面よりは後ろがいいので、BackGroundとGroundの間に、TreeというSorting Layerを作成しましょう〜
BackGroundとGroundの間
更にtree1、tree2にBoxCollider2Dを付け、Transform情報を修正しましょう〜下に各オブジェクトのInspector情報を載せておきます〜
treeのInspector
tree1のInspector
tree2のInspector
ゲーム画面を見てみましょう〜
木の間をひよこがくぐり抜けるイメージ
それでは今作成したtreeオブジェクトは一旦Prefab化しておきます〜
Prefab化したら元のオブジェクトはDelete
【課題2】障害物Prefabをスクリプトで生成する
さて、障害物のPrefab化まで終わりました〜
続いては障害物Prefabを生成し、障害物がひよこに自動的にせまってくる機能を実現する、MapScriptを作成します〜
自動的に迫ってくる処理を実現するために、movingObjという空オブジェクトをひとつ作成しましょう〜
空オブジェクト(movingObj)作成
それではこのmovingObjに、以下のソースを貼り付けましょう〜
treePrefabとmovingObjと、2つのpublic変数があるので指定しておきます〜
ドラッグ&ドロップ!
それではスクリプトの解説に入ります〜
まずはStartメソッド内でStartCoroutineというメソッドが実行され、更に別のメソッド(MoveMap、SetTree)を呼び出しております〜
StartCoroutineで呼び出されるメソッドの戻り値は、「IEnumerator」という型を使うルールになっております〜
普通にメソッドを呼び出すのではなくコルーチンという機能を使ってメソッドを呼び出す利点は、「◯秒経ってから実行」という処理を実装できる点です〜
さて、それではコルーチンが呼び出すメソッドのうち、まずはMoveMapメソッドを見ていきましょう〜
最初にwhile文を使っているので条件を満たすまで繰り返し処理を行いますが、条件部分が「true」となっているため、無限ループとなっております〜
中を見てみましょう〜最初にX軸が12(画面外)、Y軸が3~-1.5のランダムで位置情報を取得しております〜
次に、Instantiateメソッドにより、先ほどの位置情報にTreePrefabを作成しております〜
次に、作成されたTreePrefabは、movingObjを親オブジェクトに設定しております〜「transform.parent」で親オブジェクトを指定することができます〜
次が大事です!
「yield return new WaitForSeconds (1.5f)」と書かれていますが、yieldは中断を表します〜つまりこれは、1.5秒待ってから次の処理に移るという意味です〜
SetTreeメソッドは無限ループなので、1.5秒おきにY軸方向にランダムに、TreePrefabを作成しているということですね〜
yieldを使った記述は、コルーチンの中でしかできません!時間差処理を行いたい時はこのように実装すると覚えておくと、いいと思います〜
次にMoveMapメソッドについてです〜こちらも冒頭でwhile(true)と書かれているため、無限ループです〜
まず最初に、movingObjの位置情報を取得しています〜そして、movingObjのXの位置を、1秒かけて-4しております〜(Time.deltaTimeは1秒かけて〜という意味)
これはゲーム画面でいうと、1秒かけて右から左に4移動しているということです〜
つまり、movingObjを親オブジェクトとしているTreePrefabも一緒に、1秒かけて右から左に4移動するということです!
最後の「yield return 0」は、中断は無しということで、次のフレームからすぐに再開するという意味です!中断しなくても一応書いておかないといけないんです〜
それではゲームを動かしてみましょう!
ゲーム画面
迫り来る丸太の間を、ひよこがくぐり抜けています〜だいぶゲームらしくなってきました〜
今回はここまでです〜
ありがとうございました〜
【Unity開発5】プレイヤーピヨを動かしたい!【フラッピーバード風:2】
【Unity開発5】前方に障害物を作り、くぐり抜けたい!【フラッピーバード風3】
【Unity開発5】ゲームにスコア機能を付けたい!【フラッピーバード風4】
【Unity開発5】タイトルとゲームオーバーを作りたい!【フラッピーバード風5】