今日は、「キツネくん森へいく」ゲームの最後のシーンとなるボス戦の準備の続き。
この前は、ボスがランダムに種類の違う弾を繰り出してくるようにしようとして、岩ブレットを無数に吐き出して、蛇のようにトグロを巻くという訳のわからない事態に陥ったので、今日は新しい別のシーン「Last」を作ってまず実験的にやってみることにした。このシーンは俯瞰的に上から見た感じで作る予定。
やりたいこと
1. ブレット(弾)の用意
ブレットを用意する。これはこの前と同じ、岩と切り株のスプライトをアニメーションにしたものに、speedとか方向とかを決めるスクリプト「BossBulletController」とRigidbody2D、Colliderをつけて、プレハブ化しておいた。
2. ボスが弾を生成して発射する
ボスのスプライトがまだ仮のものしかないので、とりあえずそのボスに、ブレットの発射口のようなノズルをつけて、俯瞰的に見てもこっちが前ですよとわかるようにしてみた。ブレットの飛ぶ方向はボスがキツネくんのいる方向に体を向けることにするので、真っすぐ正面に飛ばせばよいと思っている。(ただし、今日はまだ向きを変えるところまでやれていないので、適当な方向に岩を切り株を飛ばしていればし!ということにしてある)
生成はInstantiate(BossBullet, transform.position, transform.rotation);
連続攻撃はInvokeRepeating("BulletSeisei", 1, 1);
などを使って関数を作ってみた。
3. キツネくんがテリトリーに入ったらという条件をつけて攻撃スタート
ボスとの距離が一定以内になったら、ボスがキツネくんの方を向いて、攻撃を仕掛けてくるようにする。これは距離を測るより、ボスの周りに円を描いて、それにコライダーをつけることで実装できるかなと、思ってやってみた。2Dオブジェクトの円をボスの子どもとしてくっつけて、円の名前を「Territory」とし、それにサークルコライダーをつけて、制作中わかりやすいようにうっすらと色を付けておいた。ブレットの生成と発射のスクリプトも今はとりあえずこのテリトリーにアタッチしてみた。これでキツネくんがこの円の中に入ると、ボスが攻撃してくればOK!
円に入ってきたら・・・は
void OnTriggerEnter2D(Collider collision)
{ if(collision.CompareTag("Player")==true)
{
InvokePeating("BulletSeisei", 1, 1);
}
}
とここまでは、so far so Good! 上手くいったぞ~!
、、、なのだが、実はダメだったのだ~~~~~!!!!
Triggerのついたテリトリーの外にキツネくんが出ても一度始まった攻撃は止まない。
そして、もう一度入りなおすと、弾が二倍の量になって飛んでくる。
そして、さらにもう一度入りなおすと、弾の量は3倍に!!
こりゃ、恐ろしい(*_*;
4. ボスがキツネくんの方を向く
これは今日はできなかった。明日の課題。
それより、3.の問題をなんとかしなくては!
OnTriggerExitというのを使うとしても、生成をやめるという関数の書き方がわからない。nullを生成するとやってみたけど、ダメだったし、、、、switchという構文を使うのかな~~?それならretrunというので止められるみたいだが・・・
ま、明日考えよう。(こん)