読者です 読者をやめる 読者になる 読者になる

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

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

【Unity4】敵をランダムで生成! Randam.Range, Instantiate【レースゲーム5】

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


スポンサーリンク

Unity5.1.1p3 Personal(2015年7月)

f:id:hiyotama:20150505151209p:plain

 

前回の続きです〜

 

今回は敵の車をランダムで生成していきます〜

敵がいないとどんどん進めてしまいますので、これで少しはゲーム性が出てくるかと思います〜

 

【目標】敵キャラをランダムで生成する!

 

【課題1】敵キャラを生成する

まずは敵になる車をAssetStoreからダウンロードし、Importしましょう〜

 

今回はClassic CarというAssetを使います〜

 

f:id:hiyotama:20150712084946p:plain

Import

 

f:id:hiyotama:20150503203007p:plain

Oldtimerという名前のPrefabが今回生成する敵

 

Oldtimerのrotation.yだけ直しておきましょう〜以下にTransform情報を貼っておきます〜

f:id:hiyotama:20150503204117p:plain

Rotation.yを90に変更

 

それでは敵キャラを生成するscriptを、前回作成したcreateScriptに加筆修正していく形で作成していきます〜以下ソースです〜

 

 

public変数を4つ用意したので、それぞれにOldtimerを設定しましょう〜

 

f:id:hiyotama:20150503204354p:plain

同一Prefabをそれぞれに設定

 

仕組みはCreateMapメソッドと同じです〜敵用のボーダー(enemyBorder)を作っておき、それを超えた場合、4つの敵キャラをRandam.Rangeによりランダムで生成しております〜生成にはInstantiateメソッドを使っております〜

 

Randam.Range(x, y)は、xとyの間の数値をランダムで取得します〜それが0であった場合、敵キャラを生成しているということです〜今回は、0と3を指定しているので、0,1,2,3のどれかの数値を取得すると思われるかもしれませんが、int型の場合は一番最後の数値(今回でいう3)は含まれません!つまり0,1,2の中で0が出たら敵キャラを作る=1/3の確立で敵キャラを作るということです〜

ちなみにfloat型だと一番最後の値も含まれるみたいです〜

 

Instantiateは今まで何度か出てきましたが、第1引数で生成するObject、第2引数で生成する位置、第3引数で生成するObjectの角度を指定しています〜z軸を+250しているのは、敵が遠くからやってくるように見せるためです〜

 

f:id:hiyotama:20150503205517p:plain

敵キャラがランダムで生成されるようになりました

 

【課題2】敵キャラにぶつかった時にプレイヤーを止める

まずはOldtimerにRigidbodyとBoxColliderを付けましょう〜そして下記設定画像を参考に、RigidbodyのConstraintsとBoxColliderの位置を調整しましょう〜

また、このままだとプレイヤーが敵をブルドーザーの要領で押してしまうので、IsKinematicにチェックを入れ、script以外では敵キャラの位置が変わらないようにしておきましょう〜 

 

f:id:hiyotama:20150504141118p:plain

 

f:id:hiyotama:20150504130544p:plain

こんな感じにColliderが付きます

 

次に、敵キャラを少しずつ前進させる処理と、敵キャラが後ろへ過ぎ去っていった時に破壊する処理を、enemyScriptというスクリプトを作成して追加していきます〜

スクリプトを作ったらOldtimerプレハブにつけて下さい〜

 

 

transform.Translateによって、x方向へ-0.1fずつゆっくりと進んでいるのですが、90度回転されているので、実際はCar1と同じ進行方向をとっています〜

 

MainCameraの位置はCamera.main.transform.positionで取得できるので、そのpositionを超えた時、OldtimerをDestroyしています〜

 

最後にプレイヤーが敵キャラにぶつかった時、OnTriggerEnter内でspeedを0に戻す処理を追加しておきましょう〜

 

 

あとはOldtimerプレファブにEnemyタグを付ければ、自分の車が敵キャラにぶつかった時、speedが0に戻ります〜

 

f:id:hiyotama:20150504141853p:plain

Enemyタグを付ける

 

とりあえず今回は以上になりますが、今のままではスピードが出すぎてしまっていてOldtimerをすり抜けてしまいますので、次回はレベルによるスピード制御と、制限時間の機能についての記事になる予定です〜

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

 

【Unity開発4】下準備【ドライビングゲーム1】

【Unity開発4】車を走らせたい!【ドライビングゲーム2】

【Unity開発4】車をジャンプさせたい!【ドライビングゲーム3】

【Unity開発4】道路を無限に伸ばし続ける【ドライビングゲーム4】

【Unity開発4】敵キャラをランダムで生成する【ドライビングゲーム5】

【Unity開発4】レベルによるスピード制限機能を追加する!【ドライビングゲーム6】

【Unity開発4】制限時間を設ける【ドライビングゲーム7】

【Unity開発4】タイトル・ゲームオーバーを仕上げる!【ドライビングゲーム8】