日々是unity#10

前回でプレイヤーの移動まで終えたので、今回は弾の発射を作ろうと思う。
弾の発射自体はチュートリアルで学んだ通りにすればできるはずなので、それを復習しながらやればいいさ。



と思っていたのだが、どうにもうまくいかない。
lookdirectionがどうのこうのと言われていて、そういえばここで若干つまったなぁ、と思い出しながら考えてみた。

void Launch() {
GameObject projectileObject = Instantiate(projectilePrefab, rigidbody2d.position + Vector2.up * 0.5f, Quaternion.identity);
Projectile projectile = projectileObject.GetComponent<Projectile>(); projectile.Launch(lookDirection, 300);
animator.SetTrigger("Launch");
}

Ruby'sAdventrue:2D入門 投射物の作成より

これはチュートリアルで学んだ投射物に使われたscriptだが、そもそもこのlookDirectionは向いている方向に弾を発射するとかいう、いわば360度シューティング的なscriptだ
常に上を向いて一方向にしか攻撃を出さないならば、もうすこしscriptを簡単にできるのではないか?
Playerは弾を召喚させ、弾は常に前に進む、そんなコードを書けばいいのではないかと思い当たり、適当にコードを書く。
Playerの少し上に召喚させるようにInstantiateを書き、その下の部分は全部いらないので削除。
弾にはtransform.positionを常に前に変更するようにする。
ここでVectorの扱いがわからずググる。
これにより、”this.transform.position += newVector3(0, 0.02f, 0);"というコードができた。
実行してちゃんとボタンを押したら発射したので成功だ。

次に弾の当たり判定をつける。
画面外にでた弾は、画面外に設置している壁にあたり消滅するようにする。
弾と外壁にcolliderとrigidbodyをつけて、当たったら消えるようにOnCollisionEnterをつける。
Destroy(gameObject)をつけていざ実行すると、弾は壁に当たり…

当たることなく通過する。

あれー?
ちゃんとスペルミスがないかチェックもしたし、引数(であってるのか?)もcollisionにしてるはず。
あれやこれやといろいろ試して、OnTriggerEnterに変更して試してみると、ちゃんと弾は壁に当たり消えた。
Collisionでも当たり判定はできたと思ったが、少し違うのか?
ここは後で調べておこう。

非常に簡素だが、スプライトは後でつけることもできるしムシムシ。

さて、今日最後に敵を追加しようか。
イメージとして本家インベーダーのように一定時間右に動き、少し下に移動。
再度一定時間左に移動を繰り返す。
こういったコードを書きたい。
チュートリアルでも似たようなコードを書いた気がするが、あれは横移動のみだった。
応用できるのか?

考えていても仕方ないので、とりあえず敵キャラを作成する。
形は適当でいいので三角。どうせ後でスプライト追加できる。多分。
こいつにも当たり判定をつけるため、rigidbodyとcolliderをつける。
そして、移動方法を考えていたところで今日はタイムアップだ。


今日久しぶりにCS版TERAを起動した。
もし私の技術がすごいことになった時、TERAのアクションRPGを見てみたい、作ってみたいという野望があったからだ。
なんとなくインしただけだったが、まさかの4年前のフレンドと遭遇。
そのまま現在の簡単なIDへと連行された。
結構楽しかったし、やりこみ要素も増えていた。
これから少し触れるタイミングができたら触っていこうと思う。

しかしあれだよ、3000時間かけて作った装備が今の初心者装備に成り果てているのはちょっとショックだよ…


参考にしたサイト


この記事が気に入ったらサポートをしてみませんか?