壊す
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メソッドにしておけば、爆弾やパワーアップなど、ほかのコードからも花瓶を壊せます。
チャレンジ
中級ボールがブリックを壊し、ブリックのポイントがスコアに加算されます。
GameManagerにint score;と、スコアにbrick.pointsを加算するpublic void BrickBroken(Brick brick)を追加します。Brickにpublic void Hit()を記述します。GameManager.Instance.BrickBroken(this);を実行し、その後Destroy(gameObject);を実行します。BrickのOnCollisionEnterで、オブジェクトのタグがBallの場合にHit()を呼び出します。
「プレイ」を押してボールを発射します。ボールが当たったブリックはそれぞれ消えます。その後、「確認」を押します。
自分で試してみよう
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// 次は、ボールがブロックを壊し、そのブロックの得点を獲得します。
}
Unityゲーム:ブロック崩しのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド