AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

TowerDefenseを作ってみる(2)

このへんを入れてみました。

  • 敵が2秒間隔で連続してやってくる
  • 敵が進む経路をWayPointとして設定できる

基本形なところはだいぶできました。
黄色のcubeが経路なので、右に進んで下にV字行って戻ってきて、また右に進むという経路になります。

f:id:yasu9780:20150509095610p:plain

WayPointはUnityのStandardAssetsのAIcarの自動運転の仕組みなどでも使われています。tsubakit1.hateblo.jp


今回は画面上の黄色のcubeを左から順番にたどっていく感じで作りました。

Vector3の配列としてwpを持ち、シーン上の黄色のcubeの位置を読み込んで、
初期は0として、次のwaypointに到達するとstateを進めて、次のwaypointを目指す。
最後のwaypointに到達したらゴール。
標準のcomponentがあるようですが、自前で作っても簡単ですね。
車を町で走らせる場合なども、同じ仕組みで行けますね。
実際の座標も、実際にシーンで置いてみて決められるので、ゲームエンジン的な仕組みだと思います。

void Start () {
	wp = new Vector3[10];
	wpState=0;
	wp[0] = GameObject.Find("Waypoint000").transform.position;
	wp[1] = GameObject.Find("Waypoint001").transform.position;
	wp[2] = GameObject.Find("Waypoint002").transform.position;
	wp[3] = GameObject.Find("Waypoint003").transform.position;
	wp[4] = GameObject.Find("Waypoint004").transform.position;
	transform.position = wp[0];
}
void Update () {
	if( Vector3.Distance( transform.position,wp[wpState] )<=0.2f )
	{
		wpState++;
		if(wpState>=5)
		{
			Main.life--;
			GameObject.Destroy(this.gameObject);
		}
	}
	else
	{
		transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(wp[wpState] - transform.position), 2f);
		transform.position += transform.forward * speed;
	}
}