Menu
CoddyTech

落下物

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

壊れたブロックは、ときどきパワーアップを落とし、それはパドルに向かって落下します。落とすかどうかは確率判定です。Random.valueは0から1までのランダムな浮動小数点数なので、Random.value < 0.15fは約100回中15回trueになります。確率をフィールドにしておけば、調整できます。また、テストでは毎回落とすように1に設定したり、何も落とさないように0に設定したりできます。

どのパワーアップが落ちるかは、プレハブの配列からランダムなインデックスを選ぶ2回目の確率判定で決まります。intを使うRandom.Rangeは最大値を含まないため、Random.Range(0, array.Length)ならすべての要素を選べます。敵の戦利品の例:

public GameObject[] loot;
public float lootChance = 0.25f;

void DropLoot()
{
    if (Random.value >= lootChance) return;
    int pick = Random.Range(0, loot.Length);
    Instantiate(loot[pick], transform.position, Quaternion.identity);
}

パワーアップは毎フレーム自分自身を移動させて一定の速度で落下し、プレイエリアより下に来ると自分自身を破棄するため、取り逃したものが溜まりません。そのプレハブにはキネマティックRigidbodyとトリガーコライダーがあるので、物理エンジンはそれが動くことを認識し、パドルに到達したことを検知できます。

challenge icon

チャレンジ

難しい

壊れたブロックは、ときどきパワーアップを落とします。

  1. PowerUpにfallSpeed = 3fとbottomY = -9fを追加します。Update()では、fallSpeedの速さで毎秒落下させ、bottomYより下で破棄します。
  2. GameManagerにpublic GameObject[] powerUps;とpublic float dropChance = 0.15f;を追加します。
  3. BrickBrokenで、Random.value < dropChanceなら、ブロックの位置にpowerUps[Random.Range(0, powerUps.Length)]をインスタンス化します。

「プレイ」を押してブロックを壊します。ときどきパワーアップが落ちるようになります(キャッチする処理は次に追加します)。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

public class PowerUp : MonoBehaviour
{
    // 最終章:壊れたブロックから落ちてくるパワーアップアイテム。
}

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

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