【Unity4】敵をランダムで生成! Randam.Range, Instantiate【レースゲーム5】
Unity5.1.1p3 Personal(2015年7月)
前回の続きです〜
今回は敵の車をランダムで生成していきます〜
敵がいないとどんどん進めてしまいますので、これで少しはゲーム性が出てくるかと思います〜
【目標】敵キャラをランダムで生成する!
【課題1】敵キャラを生成する
まずは敵になる車をAssetStoreからダウンロードし、Importしましょう〜
今回はClassic CarというAssetを使います〜
Import
Oldtimerという名前のPrefabが今回生成する敵
Oldtimerのrotation.yだけ直しておきましょう〜以下にTransform情報を貼っておきます〜
Rotation.yを90に変更
それでは敵キャラを生成するscriptを、前回作成したcreateScriptに加筆修正していく形で作成していきます〜以下ソースです〜
public変数を4つ用意したので、それぞれにOldtimerを設定しましょう〜
同一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しているのは、敵が遠くからやってくるように見せるためです〜
敵キャラがランダムで生成されるようになりました
【課題2】敵キャラにぶつかった時にプレイヤーを止める
まずはOldtimerにRigidbodyとBoxColliderを付けましょう〜そして下記設定画像を参考に、RigidbodyのConstraintsとBoxColliderの位置を調整しましょう〜
また、このままだとプレイヤーが敵をブルドーザーの要領で押してしまうので、IsKinematicにチェックを入れ、script以外では敵キャラの位置が変わらないようにしておきましょう〜
こんな感じに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に戻ります〜
Enemyタグを付ける
とりあえず今回は以上になりますが、今のままではスピードが出すぎてしまっていてOldtimerをすり抜けてしまいますので、次回はレベルによるスピード制御と、制限時間の機能についての記事になる予定です〜
ありがとうございました〜
【Unity開発4】車を走らせたい!【ドライビングゲーム2】
【Unity開発4】車をジャンプさせたい!【ドライビングゲーム3】
【Unity開発4】道路を無限に伸ばし続ける【ドライビングゲーム4】
【Unity開発4】敵キャラをランダムで生成する【ドライビングゲーム5】
【Unity開発4】レベルによるスピード制限機能を追加する!【ドライビングゲーム6】
【Unity開発4】制限時間を設ける【ドライビングゲーム7】
【Unity開発4】タイトル・ゲームオーバーを仕上げる!【ドライビングゲーム8】