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

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

メガネっ娘がハイキック

f:id:yasu9780:20150421224748p:plain
セーラー服さんの01を、メガネっ娘の02がハイキックして回るという
殺伐としたシーンを作成
自キャラだけはメガネっ娘も蹴れる


頭の上に残HPゲージを作成中。まだ数値は反映されない。
childに登録しておいて、HPの値でscaleを変化させればいいはず。


メガネっ娘が近くのセーラー服さん01を探すところは
距離が最小の01さんを見つけるようにしてみた。
蹴られて唸ってる間はActiveFlagを落として、
探索対象から外すようにしている。
ハイキックのアニメはAssetStoreの無料の奴を使わせてもらった。

float tmpDis = 1000f;
float nearDis = 1000f;
Vector3 t2=transform.position;
for (int i=0; i<25; i++) {
	if( Main.objects[i] == null ) continue;
	if( Main.objects[i].GetComponent<SailerGirlAI> ().ActiveFlag == false ) continue;
	Vector3 t1=Main.objects[i].transform.position;
	tmpDis = Vector3.Distance(t1,t2);
	if(nearDis>tmpDis)
	{
		nearDis=tmpDis;
		targetObj=Main.objects[i];
	}
}

ターゲットが決まったら、そっちの方を向いて、前進
近くにいたら蹴りあげる
Animatorにanimationの遷移を登録しているのでParameterを設定するだけ

transform.LookAt(targetObj.transform);
transform.Translate (Vector3.forward * speed* Time.deltaTime);
if (nearDis < 0.4f) {
	animator.SetBool("Walk", false);
	myTimer=20;
	animator.SetBool("Hikick", true);
}

しかし、ハイキックでつま先が明らかに相手と接触してなかったりするので、
相手との向きとか角度とかも考えてやらないといけないので、
3Dだとこのへんが面倒だなあ。
演出というか
あと、キックのあと、相手にSendMessageして、それを受け取ると
LOSEのアニメーションを表示するようにしているんだけど、
すぐ送ると
メガネっ娘がすぐに次のターゲットを目指して歩き出すので、
ハイキックのアニメが表示されない(というか中断している)
このへんはどう制御するのがスマートなのかよく分からないので、
とりあえずタイマー変数を設定してやってみた
このへんのObjectの相互作用による互いの遷移変化のやりかたを
うまくできるように考えたい。


あと、セーラー服さんの中の学ランの男の子は
なぜかmmd2mecanimで変換すると色とかがおかしくなってしまった。
原因不明