【Unity2D 入門】ダメージを受けた時に赤く表示する方法
こんにちは。ロクと申します。
今回は、Unity2Dにおいて、「敵から攻撃を受けた時にプレイヤーを赤く表示する方法」というテーマで記事を書いていきます。
ゲーム作りでは、エフェクトの有無によって価値が大きく変わってきますので、ダメージ処理の演出についても手を抜くことはできませんよね。(;^ω^)
ぜひ、この記事を参考にしながら、ダメージを受けた時に赤く表示する方法について習得していきましょう。
処理の概要を軽く説明
いきなり解説を始めても全体像は見えてこないですので、ここで何となく処理実装の手立てを見ておきましょう。
- 当たり判定を作る
- ダメージを受けた時の判定を作る
- プレイヤー自体のカラーを赤にする
大まかに言うと、上のリストのような機能を実装します。
単に、ダメージを受けた時にプレイヤーを赤くする処理について知りたいだけなら、最初の下準備については飛ばしても問題ないです。
意外と簡単だと思いますので、気を軽くしてやっていきましょう。
下準備をしよう
ここからは、ダメージ処理を実装するための下準備が続きます。ある程度Unityに関して応用が利くという方は、この部分を飛ばしてしまっても大丈夫です。
まずは当たり判定から
それでは、Unityを起動しましょう。
今回は2Dのプロジェクトを例に説明していきますので、2Dを作成しましょう。
ここでは、まず当たり判定から作っていきたいと思います。
「+」→「2D Object」→「Sprites」→「Square」を選択し、四角形のオブジェクト(Square)を作成しましょう。名前はなんでもいいです。
座標を(0,0,0)にしておきましょう。
今作った、この四角のオブジェクトが今回のプレイヤーの役になります。
四角の代わりに、ご自身が用意しているキャラクターの画像をスプライトに設定しても、方法は同じですので大丈夫です。
次は、作成したオブジェクトを選択し、インスペクターのほうに注目してください。これから当たり判定を作ります。
そして、下の「AddComponent」から、
「Physics2D」→「BoxCollider2D」を選択し、コライダーを付けます。
さらに、そのコライダーのisTrigger という項目にチェックをつけてください。
追加で同じオブジェクトから「AddComponent」で
「Physics2D」→「Rigidbody2D」を選びます。
そして、今回は重力の影響をなくしたいので、インスペクターに追加されたRigidbody2Dの「GravityScale」を0にしましょう。
ダメージの判定をできるようにしよう
次は、ダメージを受けた瞬間を判定して処理を行うため、その判定機能を作っていきましょう。
下のほうにあるAssetsフォルダ内で右クリックし、「Create」→「C#script」を選択しましょう。
名前はなんでもいいですが、今回は「damage」としておきましょうか。
作成したら、このスクリプトをヒエラルキーウィンドウのSquareにアタッチしましょう。
そしたら、damageスクリプトをダブルクリックして開いてください。
開いたら、オブジェクトに何かものが当たったとき(攻撃されたとき)に呼び出される関数を書きます。
Update関数の下に以下の関数を追加してください。
void OnTriggerEnter2D()
{
}
プログラムの位置関係は以下の画像の通りです。
今回の場合は、当たってきたオブジェクトを区別する必要がないので関数の引数を省略しています。
あとは、この関数内に、プレイヤーを赤くするための処理を書けば、「ダメージを受けた時の演出」を行うことができるというわけです。
ゲームオブジェクトを赤くする処理
ここからが肝心なところです。
方法としては意外と単純で、OnTriggerEnter2Dの中に、ゲームオブジェクトを赤色にするプログラムを書きます。
では、以下のように書いてみましょう。
void OnTriggerEnter2D()
{
gameObject.GetComponent<SpriteRenderer>().color=new Color32(255,0,0,255);
}
スプライトという画像を表示するものがUnity2Dにはありますが、実はそのスプライトのカラーを変えることができます。
これはどんな画像を当てはめていても同じで、何かの画像をキャラクターとして使っている場合でも、そのキャラクターの色を変えることができます。
上からボールが降ってくるように追加して実行してみた様子が下のようになります。
ボールを上から降らせる方法について知りたい方は、以下の記事に目をお通しください。
こちらは、ボールを落としたり、当たり判定に認識してもらったりするために必要な準備について解説しています。
メインの解説は当たり判定のことですので、当たり判定がよくわからないという方は読んでみるとよいでしょう。
ここで、よく見てみると、オブジェクトが一度赤色になった後、元の色に戻らないようになっていますね。
それもそのはずで、色を元に戻すプログラムを書いていないからです。
色を変えたら色を戻す必要があります。
では、0.2秒後に色がもとに戻るように書きかえてみましょう。
まずは、新しい関数を作ります。
OnTriggerEnter2Dの下に、”back”関数を作りましょう。このbackは、「元に戻る」という意味で名づけたので、気に入らなければほかの名前で作ってもらっても構いません。
実際の関数は以下のようになります。
void back()
{
gameObject.GetComponent<SpriteRenderer>().color=new Color32(255,255,255,255);
}
この関数を、赤色に変えた0.2秒後に実行したいので、Invoke関数を使って時間差をつけます。
OnTriggerEnter2D 関数の中の下のほうに以下のプログラムを追加してください。
Invoke("back",0.2f);
プログラム全体は以下の画像の通りになります。
これを実行した様子が以下になります。
どうでしょうか、ダメージを受けた時のように赤く点滅していますね。
まとめ
今回の話の要点をまとめました。
- 当たり判定をつける
- 攻撃を受けたらスプライトの色を赤にする
- Invoke関数をつかって時間差で元の色に戻す
これら3点を意識して作るようにすると、もう迷うことがなくなると思います。
次は、キャラクターのほうではなく、視点全体を赤くし、さらに画面が揺れるようにする方法について解説しようかと思います。
それでは~。