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

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

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

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】