Menu
CoddyTech

壊す

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

レンガには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とpublic void BrickBroken(Brick brick)を追加し、ブロックのpointsをscoreに加算します。
  2. Brickにpublic void Hit()を記述します。このブロックが壊れたことをGameManager.Instanceに伝え、その後ブロックを破棄します。
  3. BrickにOnCollisionEnterを追加します。Ballタグが付いたオブジェクトが衝突したとき、Hit()を呼び出します。

Playを押して、ブロックをいくつか壊してから、Checkを押します。

自分で試してみよう

using UnityEngine;

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

    // 次に、ボールがブロックを壊し、その得点を獲得します。
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

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