【UNITY】タワーディフェンス3(タワーの設置他)


まずはじめに以前作ったプロジェクト「Strategy01」をプロジェクトファイルごとコピー&ペーストしよう。その後フォルダ名「Strategy02」に変えよう。

今回は、の追加機能!!
1.マウスでクリックした所にオブジェクトが置かれるようにする。
2.プログラミングの整理(以前のプロジェクト(Strategy01)の無駄だったところの削除)
マウスポインタの位置(3D空間上の座標)を取得

Unityでは3D空間上の座標を簡単に取得することができます。レイキャストと言う技術をつかってメインカメラから見たマウスポインタの位置を取得してくれます。
1.「GameCont.cs」のupdate() に以下の文を追加します。
正常に動いて入ればクリックしたオブジェクトの名前を取得することができます。(*コライダーがアタッチしてあるものだけ)
2
マウスポインタの位置にマーカーを表示させる
「GameCont.cs」のupdate() に以下の文を追加します。
1.マーカーのオブジェクトを扱うためのPublic変数[public GameObject pointerOBJ;]を定義します。
2.[pointerOBJ.transform.position = hit.point;]を追加してマーカーの座標をレイキャストで取得したマウスポインタの座標にします。
正常に動いて入ればマウスポインタに合わせてマーカーオブジェクトも他のオブジェクトの上を一緒に動くはずです。
実際にマウスポインタがどこにあるか分かりやすくなるように、マーカーを作ってみます。右のようなオブジェクトを作って見ましょう。*形は何でもかまいません。
ポインタとして使うオブジェクトはレイキャストに感知されないように設定しておきます。一番簡単た方法として、Layerを「Ignore Raycast」にすることです。これをしないと、ポインター用のオブジェクトがRayCastに連続的に感知されて徐々にポインタがカメラに近づいてくる現象がおきてしまします。

inspector上で、定義したpublic変数にマーカーオブジェクトのプレファブを指定する

3
マウスポインタの位置にゲームオブジェクトをインスタンス化する
マウスでクリックした位置にプレファブ化したゲームオブジェクトを生成してみましょう。
まず、↓のようなゲームオブジェクトを作り、その後作ったゲームオブジェクトを使ってプレファブを作成しましょう。また、このオブジェクトはタワーからの攻撃で消えます。
作成したオブジェクトがタワーからの攻撃で消えるようにタグ「Defender」を追加します。

1.マーカーのオブジェクトを扱うためのPublic変数[public GameObject defenderOBJ;]を定義します。
2.クリックされた場合に、ポインタの位置にプレファブをインスタンス化するプログラムを追加します。
次に、inspector上で、定義したpublic変数にゲーム上に置きたいオブジェクトのプレファブを指定する

4
プログラムの簡略化

以前、コーディングした「BulletCont.cs」「EnemyCont.cs」の機能を統合してみよう
以前はそれぞれのプログラムで「敵」オブジェクトと「弾」オブジェクトの衝突判定とオブジェクトの削除を行っていたが、この2つのプログラムを統合して「BulletCont.cs」にすべての機能をもたせてみよう!!
【BulletCont.cs】
【EnemyCont.cs】
とりあえず現在のEnemyCont.csの処理はいらないので処理をコメントアウトしておこう

以前、コーディングした「BulletCont.cs」「EnemyCont.cs」の機能を統合してみよう
以前はそれぞれのプログラムで「敵」オブジェクトと「弾」オブジェクトの衝突判定とオブジェクトの削除を行っていたが、この2つのプログラムを統合して「BulletCont.cs」にすべての機能をもたせてみよう!!
1.タワーをプレファブ化して、マウスをクリックしたところにタワーを置くように修正しよう!
2.フィールドをもっと大きくして、「敵」をもっと多く出現させてみよう
3.タワーのおける数を制限してみよう【ハイレベル】