LoginSignup
0
1

More than 3 years have passed since last update.

Unityでシューティングゲームを作る(4)

Last updated at Posted at 2020-02-08

ここまでの進捗

  • 背景がループするようにした。
  • 普通の敵の動作を作成し、その敵が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回行っている
これによってダメージを受けると以下のようになった
ezgif.com-video-to-gif (2).gif

プレイヤーがダメージを受けて点滅してる間は無敵になる

今回はプレイヤーが攻撃を受けてから点滅している間だけプレイヤーのレイヤーを変更することによって衝突判定を無効化した。
teratailに質問があったので参考にした。
teratail/衝突判定を一定時間無効化したいです

コメント 2020-02-07 033604.png

まずレイヤーを追加するために[Edit]→[Project Settings]を選択する。

コメント 2020-02-07 033643.png

この設定画面がでるので左の欄から[Tags and Layers]を選択し、Layersの中からUser Layerのどれかに名前を付ける
今回はUser Layer 9にInvisibleという名前を付けた。

コメント 2020-02-07 033725.png

最後に左の欄からPhysicsを選択し、衝突を無効化したいオブジェクトがあるレイヤーと先ほど作成したレイヤーのチェックを外す。
これによってInvisibleのレイヤにあるオブジェクトとDefaultにあるオブジェクトの衝突が無効化される。

ezgif.com-video-to-gif (3).gif

ちょっと見ずらいかもしれないけど、点滅時間が1.2秒で短いので一瞬しか無効にならない。
今後調整していこうと思う。

これで弾を受けたときの点滅と無敵時間を作ることができた。
難易度をあげるにつれて点滅時間の延長も検討していきたい。

次回はアニメーションをつけてボスを作成して完成させたい。
ちなみにここからこだわるつもり

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1