ドロップ
Coddyの「Unityゲーム:ブロック崩し」コースのレッスン 13/16。
壊れたブロックは、ときどきパワーアップを落とし、それはパドルに向かって落下します。落とすかどうかは確率判定です。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とトリガーコライダーがあるので、物理エンジンはそれが動くことを認識し、パドルに到達したことを検知できます。
チャレンジ
難しいPowerUpにpublic float fallSpeed = 3fとpublic float bottomY = -9fを追加します。Update()では、1秒あたりfallSpeed単位で下方向に移動させ、y座標がbottomYより下になったらパワーアップを破棄します。GameManagerにpublic GameObject[] powerUps(シーンでWidePowerUpとMultiPowerUpのプレハブをリンクします)とpublic float dropChance = 0.15fを追加します。BrickBrokenでは、dropChanceの確率で、ブリックがあった場所にpowerUpsの中からランダムに1つ生成します。
今のところ、パワーアップはパドルをすり抜けて落ちます。次はキャッチできるようにします。
Playを押し、パワーアップが落ちるまでブリックを壊してから、Checkを押します。
自分で試してみよう
using UnityEngine;
public class PowerUp : MonoBehaviour
{
// 最終章:壊れたブロックから落ちてくるパワーアップアイテム。
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。