Menu
CoddyTech

掉落物

Coddy Unity 游戏:打砖块 课程的第 14 课,共 19 课。

砖块被打碎时,有时会掉落一个朝挡板落下的道具。是否掉落由一次随机判定决定:Random.value 是一个从 0 到 1 的随机浮点数,因此 Random.value < 0.15f 大约每 100 次会有 15 次为 true。把掉落概率保存在字段中,便于调整,也可以在测试时将它设为 1,让道具每次都掉落;或设为 0,让道具完全不掉落。

掉落哪种道具由第二次随机判定决定:随机选取数组中的一个预制体索引。使用整数时,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 在线编辑器