Menu
CoddyTech

壊す

Coddyの「Unityゲーム:ブロック崩し」コースのレッスン 6/19。

レンガにはRigidbodyがありませんが、ボールにはあり、Unityは衝突時に両方のオブジェクトへOnCollisionEnterを送ります。そのため、レンガ自身が衝突に気づくことができます。レンガのスクリプトでは、gameObjectはレンガを指し、collision.gameObjectはレンガにぶつかったものを指します。

スコアはGameManagerが管理し、レンガはプレハブの複製です。プレハブはシーン外にあるアセットなので、そのフィールドからインスペクターでシーン内のGameManagerを参照することはできません。GameManagerはAwake()で静的なGameManager.Instanceに自身を設定するため、プレハブの複製も含め、どのスクリプトからでもGameManagerにアクセスできます。

プレイヤーがぶつかると砕ける花瓶:

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Player")) Shatter();
}

public void Shatter()
{
    Destroy(gameObject);
}

Destroy(gameObject)は花瓶を削除します。Destroy(collision.gameObject)はプレイヤーを削除し、Destroy(this)はスクリプトだけを削除して花瓶はそのまま残します。破壊処理を独立したpublicメソッドにしておけば、爆弾やパワーアップなど、ほかのコードからも花瓶を壊せます。

challenge icon

チャレンジ

中級

ボールがブリックを壊し、ブリックのポイントがスコアに加算されます。

  1. GameManagerにint score;と、スコアにbrick.pointsを加算するpublic void BrickBroken(Brick brick)を追加します。
  2. Brickにpublic void Hit()を記述します。GameManager.Instance.BrickBroken(this);を実行し、その後Destroy(gameObject);を実行します。
  3. BrickのOnCollisionEnterで、オブジェクトのタグがBallの場合にHit()を呼び出します。

「プレイ」を押してボールを発射します。ボールが当たったブリックはそれぞれ消えます。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class Brick : MonoBehaviour
{
    public int points = 10;

    // 次は、ボールがブロックを壊し、そのブロックの得点を獲得します。
}

Unityゲーム:ブロック崩しのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド