丈夫なブロック
Coddyの「Unityゲーム:ブロック崩し」コースのレッスン 7/16。
レンガの中には、壊すのに複数回のヒットが必要なものもあります。各レンガは残りのヒット回数を保持します。ヒットするたびに回数が1つ減り、0にしたヒットで初めてレンガが壊れ、スコアが加算されます。それまではレンガの色が変わるため、プレイヤーはどれくらい耐久力が残っているかを確認できます。
Inspectorで設定した色の配列を使って、回数を色に対応づけます。要素0は残り1回のヒットに対応する色、要素1は残り2回のヒットに対応する色なので、回数がnの場合、色は要素n - 1になります。チャージ数のあるシールドも同じ仕組みです。
public Color[] chargeColors; // 要素 0: 残りのチャージは 1
void ShowCharges(int charges)
{
GetComponent<Renderer>().material.color = chargeColors[charges - 1];
}materialを読み取ると、最初にこのRenderer専用のマテリアルのコピーが作られるため、シールドやレンガ1個の色を変えても、Prefabの複製すべてが塗り替えられることはありません。各レンガの耐久力はGameManagerが決めます。行ごとに1つの数値を持つint[]を上の行から順に使えば、一番上の行のレンガに他の行より多くのヒットが必要になるよう設定できます。
チャレンジ
中級Brickにpublic int hits = 1とpublic Color[] colorsを追加します。シーンでcolorsに青、オレンジ、赤を設定し、それぞれ残りヒット数が1、2、3のときに使います。public void SetHits(int count)を記述します。hitsを設定し、そのヒット数に対応するブリックの色を表示します。Hit()を変更します。hitsを1減らします。0になったらブリックが壊れて、これまでどおりスコアに加算されます。それ以外の場合は、新しい色を表示するだけです。GameManagerにpublic int[] rowHits = { 2, 1, 1, 1, 1 };を追加し、新しいブリックそれぞれにSetHitsでrowHits[row]のヒット数を設定します。
Playを押し、最上段のオレンジ色のブリックを削ってから、Checkを押します。
自分で試してみよう
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Ball")) Hit();
}
public void Hit()
{
GameManager.Instance.BrickBroken(this);
Destroy(gameObject);
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。