##ここまでの進捗
- 背景がループするようにした。
- 普通の敵の動作を作成し、その敵が3秒ごとに生成される。
- 瞬間移動する敵の動作を作成し、5秒ごとに生成する。
- プレイヤーが画面の範囲外に行かないようにした。
- 敵とプレイヤーが衝突したらプレイヤーが消滅する。
- 分散攻撃の敵を実装する。
- タイトルシーンとエンディングシーンを追加する。
##今後やること
- ボスキャラの動作を実装する。
- エフェクトとBGMを追加する。
- プレイヤーが横に移動すると機体が傾くアニメーションをつける
- プレイヤーがダメージ受けると点滅して数秒だけ無敵状態になる
この記事では赤い部分を作成した。
##プレイヤーがダメージを受けると点滅する
点滅するコルーチンを作成してプレイヤーの衝突判定の中でコルーチンを実行するようにした
コルーチンは関数内で時間を空けて処理をさせたいときに使われる
点滅するコルーチンの作成に関してはこのサイトがとても参考になった。
ftvlog/オブジェクトを点滅させるスクリプト
以下がコルーチンとなる
//ダメージを受けた時に点滅する
IEnumerator Blink() {
for(int i=0;i < 4; i++) {
renderer.enabled = !renderer.enabled;
yield return new WaitForSeconds(0.2f);
}
}
この中でオブジェクトの点滅を0.2秒間隔で4回行っている
これによってダメージを受けると以下のようになった
##プレイヤーがダメージを受けて点滅してる間は無敵になる
今回はプレイヤーが攻撃を受けてから点滅している間だけプレイヤーのレイヤーを変更することによって衝突判定を無効化した。
teratailに質問があったので参考にした。
teratail/衝突判定を一定時間無効化したいです
まずレイヤーを追加するために[Edit]→[Project Settings]を選択する。
この設定画面がでるので左の欄から[Tags and Layers]を選択し、Layersの中からUser Layerのどれかに名前を付ける
今回はUser Layer 9にInvisibleという名前を付けた。
最後に左の欄からPhysicsを選択し、衝突を無効化したいオブジェクトがあるレイヤーと先ほど作成したレイヤーのチェックを外す。
これによってInvisibleのレイヤにあるオブジェクトとDefaultにあるオブジェクトの衝突が無効化される。
ちょっと見ずらいかもしれないけど、点滅時間が1.2秒で短いので一瞬しか無効にならない。
今後調整していこうと思う。
これで弾を受けたときの点滅と無敵時間を作ることができた。
難易度をあげるにつれて点滅時間の延長も検討していきたい。
次回はアニメーションをつけてボスを作成して完成させたい。
ちなみにここからこだわるつもり