Unityでダメージを受けたら点滅させ一定時間無敵にする
アクションゲームやシューティングゲームで敵に当たると自機が点滅して一定時間無敵になる、なんていう処理は良く見かけます。
今回はとてもシンプルにそれを作ってみたいと思います。
処理の流れはこのように考えてみます。
- 敵にあたったら
- 点滅して一定時間動けない
- 点滅したまま一定時間無敵になる
- 通常に戻る
ちなみにこちらの講座で被ダメしたときの処理を含め、ノックバック、HP処理などアクションRPGの作り方を教えてくれてます。
大変おすすめの講座です。興味のある人は受講してみてはいかがでしょうか。
それではUnityの新しい2Dプロジェクトを作りやっていきます。
今回もサイズは960*540で作ってます。
ちなみになぜいつもこのサイズかと言いますとUnityRoomのデフォルトのゲームの画面サイズが960*540なのでこれにしています。
プレイヤーとエネミー設置&設定
まずHerarchyにPlayerとEnemyとなるゲームオブジェクトを設置します。
シンプルに四角を2つおいてそれぞれPlayerとEnemyにしました。
続いてそれぞれのInspectorを調整していきます。
PlayerにはBoxCollider2DとRigidBody2Dを追加します。
今回重力は関係ありませんのでRigidBody2DのGravityScaleを0にしておきます。
Enemy側も設定していきましょう。
位置を少し下にずらし、色を赤にしておきました。
そしてPlayer同様BoxCollider2Dを追加しisTriggerにチェックを入れておきます。
プレイヤーにスクリプトをアタッチ
続いてスクリプトをPlayerにアタッチします。
以前こちらの記事で作成したPlayerControllerを改造していきます。
最初に必要となる変数等の宣言とStart関数でSpriteRendererとBoxCollider2Dを変数に代入しておきます。
Update関数内ではPlayerの移動を実装しています。
コードはこのような感じです。
忘れないうちにPlayerのInspectorからspeed、flashInterval、loopCount等を設定しておきましょう。
これでPlayerが動くようになりました。
エネミーにあたったらプレイヤーを点滅させる
次にEnemyにPlayerが当たったら点滅させてみます。
点滅方法はcolorを変えるなど色々方法があるかと思いますが今回はシンプルにPlayerのSpriteRendererのオンオフで点滅を実装します。
OnTriggerEnter2D関数を使いEnemyと接触したらコルーチンで点滅させることにします。
具体的にはこんな感じになりました。
では実際にEnemyに接触してみます。
このような感じで点滅してくれました。
これで点滅は実装できました。次にプレイヤーのステートを操作してダメージ中は一定時間動けない、無敵中はコライダーをオフにする等を実装していきます。
無敵時間の実装
プレイヤーのステートは通常、ダメージ、無敵の三種類定義しました。
それぞれの状態の時にどうなって欲しいか整理してみます。
- 通常(NOMAL)→動ける、ダメージ受ける
- ダメージ(DAMAGED)→動けない、ダメージ受けない
- 無敵(MUTEKI)→動ける、ダメージ受けない
こんな風になっていてくれたらいいのかなと思います。
ではPlayerが動けない時はダメージ中なのでUpdate関数内に少し追記します。
これでPlayerのstateがDAMAGEDなら動けなくなりました。
次にstateをDAMAGEDに変更します。
変更するタイミングはenemyに当たったタイミングです。
OnTriggerEnter2D内に記述しましょうか。
これで大丈夫かと思います。
続いて無敵時間を作りましょう。
コルーチン_hit()内に記述していきますが、流れを確認します。
わかりやすいように本来やらなくても良い色の変更処理も追加します
- 当たり判定をオフにする
- ダメージ中(動けない時)は黒にする
- 点滅ループ開始
- 点滅中、一定時間経過後にstateをMUTEKIにする
- MUTEKI中は緑にする
- 点滅ループ終了
- stateをNOMALにする
- 当たり判定をオンにする
- 色を白にする
ダメージ中と無敵中の色を追加したので少し長くなりましたがこんな感じでしょうか。
実際の_hit内の処理はこんな感じになりました。
実際に動かしてみましょう。
期待していた動きになってくれたかなと思います。
ここで一つ不要な変数が出来ました。
boolのisHitです。
OnTriggerEnter2Dでダメージ処理になるのはstateがNOMALの時です。
なのでisHit変数を削除し最終的にはこのようなコードになりました。
これ以外にもっとスマートな点滅&無敵方法はあると思いますが、僕はこんな感じで実装してみました。
Unityの学習方法
Unity初心者の方にオススメの学習方法をいくつか紹介します。
Unity本【kindle unlimited】
私も利用しているAmazonが提供する電子書籍読み放題のサービスです。
月額980円で約200万冊以上が読み放題でとてもお得です。
また30日無料体験もできるのが魅力です。当然Unityに関する書籍もたくさん揃っています。
またC#関連の書籍や、プログラミングのものも多数あります。
プログラミング関連の書籍は値段が結構しますので、それらが無料で読めるのはかなりお得なサービスです。
30日無料体験もありますので気に入らなければその期間に解約すれば料金は発生しません。
通常のUnity本
kindle unlimitedは全部のUnity関連書籍が読めるわけではありません。
通常に購入しなければ読めない本もありますので、その中から私が参考になった書籍を紹介します。
Udemy
Udemyの動画講座にもUnity関連のオススメの動画がたくさんあります。
その中でも私が特に気に入っている動画を紹介します。
どの動画も初心者でも完成することが出来るように丁寧に解説しています。
オンラインで学習
質問が出来るおすすめのUnity学習方法ページです。
・Unityでゲーム作りたいけど何から初めたら良いかわからない。
・独学でゲームを完成させられるか不安。
・ゲーム開発でわからないことを一人で解消できない。
・入門書を一通りやってみたが次に何していいかわからない。
こんな人におすすめしたい内容になっています。
関連記事

UnityでGoogleスプレッドシートの読み込みと書き込みを行う
今回はUnityとGoogleのスプレッドシートを連携させて、スプレッドシートの内容を表示させたり、Unity側からスプレッドシートに情報を追記して行く方法を作ってみたいと思います。 ちなみにこの仕組みを実装する経緯は業 […]

ゲーム素材を作成するときに使えるAIイラストツール
個人開発でゲームを作っていると素材をどうするか苦労しませんか?
私は絵心が無いのでいつもキャラクター等の画像で頭を悩ませます。
そんなときに使えるのがAIがイラストを作ってくれるツールです。

自作ゲームのプレスリリースを受け付けてくれるサイト
個人制作のゲームでもプレスリリースを受け付けてくれるサイトを紹介してみようと思います。
必ず掲載してくれるというわけではありませんが、参考にしていただければと思います。

ドラクエ風 簡単な名前入力システムを作る
ドラクエをはじめ、名前などを入力するシステムを作っていきます。
非常にシンプルな作りになっています。

【初心者向け】ButtonのOnClickをC#スクリプトで登録する
ButtonのクリックイベントをInspectorではなくC#スクリプトから登録する方法です。
初心者の方でも簡単に出来る内容です。

URP 2Dで複数のカメラを使って描画する
UnityのURP2Dで複数のカメラを使ってゲーム画面に表示させる方法を紹介したいと思います。
ミニマップなどを表示したいときに便利です。

ウィザードリィのような疑似3Dダンジョンを作る
ウィザードリィのような疑似3DダンジョンをUnity2Dで作成してみたいと思います。

穴掘り法で2D迷路を作る
穴掘り法を使って2Dマップを作成してみます。
プレイヤーの移動まで実装しています。

見下ろし2Dマップ上でプレイヤーを動かす
プレイヤーを2Dマップ上で移動させてみます。
見下ろし型のRPGとかでありそうなやつです。
最後までご覧頂いてありがとうございました。