Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity5】障害物をくぐり抜けろ!StartCoroutine, WaitForSeconds【フラッピーバード風3】

いつもひよこのたまごをご利用下さいましてありがとうございます!
おかげ様でチュートリアル数も10ゲーム目となりました!
チュートリアル一覧は
こちら からどうぞ!


スポンサーリンク

Unity5.0.0f4 Personal(2015年5月)

f:id:hiyotama:20150513125236p:plain

 

前回の続きです〜

 

今回は、定期的にひよこ前方に障害物を作る機能を作り、ぶつからないようにくぐり抜けるようにしましょう〜

 

【目標】前方に障害物を作成する!

 

【課題1】障害物のPrefabを作成する 

まずは障害物のPrefabを作成しましょう〜Prefabの作り方については下記エッセンスをご参照下さい〜

 

Prefabの元となる画像はこちらをお使い下さい〜

 

f:id:hiyotama:20150506124123p:plain

木です

 

こちらの画像をダウンロードし、ProjectビューへImportして下さい〜

 

f:id:hiyotama:20150506124412p:plain

ドラッグ&ドロップ!

 

 今回Sprite画像は分割しないで使ってもらって大丈夫です〜treeのSpriteオブジェクトを2つ作りましょう〜名前はtree1とtree2にします〜

 

f:id:hiyotama:20150506173507p:plain

ドラッグ&ドロップ!*2

 

そしたら空のGameObject(名前:tree)を作成し、その中にtree1とtree2を入れます〜

 

f:id:hiyotama:20150506175016p:plain

空オブジェクト作成

 

f:id:hiyotama:20150506174226p:plain

tree(空オブジェクト)の中にtree1、tree2を配置

 

次にtree1とtree2のSorting Layerの設定を行います〜背景よりは前面に出ていて、地面よりは後ろがいいので、BackGroundとGroundの間に、TreeというSorting Layerを作成しましょう〜

 

f:id:hiyotama:20150506180402p:plain

BackGroundとGroundの間

 

更にtree1、tree2にBoxCollider2Dを付け、Transform情報を修正しましょう〜下に各オブジェクトのInspector情報を載せておきます〜

 

f:id:hiyotama:20150506174831p:plain

treeのInspector

 

f:id:hiyotama:20150506180607p:plain

tree1のInspector

 

f:id:hiyotama:20150506180658p:plain

tree2のInspector

 

ゲーム画面を見てみましょう〜

 

f:id:hiyotama:20150506180722p:plain

木の間をひよこがくぐり抜けるイメージ

 

それでは今作成したtreeオブジェクトは一旦Prefab化しておきます〜

  

f:id:hiyotama:20150506181254p:plain

Prefab化したら元のオブジェクトはDelete

 

【課題2】障害物Prefabをスクリプトで生成する

さて、障害物のPrefab化まで終わりました〜

 

続いては障害物Prefabを生成し、障害物がひよこに自動的にせまってくる機能を実現する、MapScriptを作成します〜

 

自動的に迫ってくる処理を実現するために、movingObjという空オブジェクトをひとつ作成しましょう〜

 

f:id:hiyotama:20150506182240p:plain

空オブジェクト(movingObj)作成

 

それではこのmovingObjに、以下のソースを貼り付けましょう〜

 

 

treePrefabとmovingObjと、2つのpublic変数があるので指定しておきます〜

 

f:id:hiyotama:20150506183041p:plain

ドラッグ&ドロップ!

 

それではスクリプトの解説に入ります〜

 

まずは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」は、中断は無しということで、次のフレームからすぐに再開するという意味です!中断しなくても一応書いておかないといけないんです〜

 

それではゲームを動かしてみましょう!

 

f:id:hiyotama:20150506203625p:plain

ゲーム画面

 

迫り来る丸太の間を、ひよこがくぐり抜けています〜だいぶゲームらしくなってきました〜

 

今回はここまでです〜

ありがとうございました〜

 

【Unity開発5】下準備【フラッピーバード風:1】

【Unity開発5】プレイヤーピヨを動かしたい!【フラッピーバード風:2】

【Unity開発5】前方に障害物を作り、くぐり抜けたい!【フラッピーバード風3】

【Unity開発5】ゲームにスコア機能を付けたい!【フラッピーバード風4】

【Unity開発5】タイトルとゲームオーバーを作りたい!【フラッピーバード風5】