丈夫なブロック
Coddyの「Unityゲーム:ブロック崩し」コースのレッスン 7/19。
レンガの中には、壊すのに複数回のヒットが必要なものもあります。各レンガは残りのヒット回数を保持します。ヒットするたびに回数が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[]を上の行から順に使えば、一番上の行のレンガに他の行より多くのヒットが必要になるよう設定できます。
チャレンジ
中級最上段のブロックは2回当てる必要があります。
Brickにpublic int hits = 1;、public Color[] colors;(シーンで青、オレンジ、赤を設定します)、およびSetHits(int count)を追加します。hitsと色colors[hits - 1]を設定します。Hit()ではhitsを1減らします。0になったらブロックを壊して得点を加算し、そうでなければ新しい色を表示します。GameManagerにpublic int[] rowHits = { 2, 1, 1, 1, 1 };を追加し、新しいブロックごとにbrick.SetHits(rowHits[row])を呼び出します。
「プレイ」を押します。最上段はオレンジ色で、当てると青色に変わります。次に「確認」を押します。
自分で試してみよう
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);
}
}
Unityゲーム:ブロック崩しのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド