Menu
CoddyTech

坚固的砖块

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

有些砖块需要被击中多次才会破裂。每块砖都会记录剩余的可承受击中次数:每被击中一次,次数就减 1;只有当次数减到 0 时,砖块才会破裂并计分。在此之前,砖块会改变颜色,让玩家看出它还需要被击中多少次。

在 Inspector 中填入的颜色数组会将次数映射为颜色。元素 0 对应剩余 1 次击中,元素 1 对应剩余 2 次,因此次数为 n 时,对应的颜色是元素 n - 1。带有充能次数的护盾也采用相同的做法:

public Color[] chargeColors;   // 元素 0:剩余 1 次充能

void ShowCharges(int charges)
{
    GetComponent<Renderer>().material.color = chargeColors[charges - 1];
}

第一次读取 material 时,会为这个渲染器创建一份材质副本,因此一个护盾或一块砖改变颜色时,不会重新给预制体的所有副本上色。GameManager 会决定每块新砖的耐久度:一个 int[] 中每行对应一个数字,从顶行开始排列,这样顶行就能比其他行承受更多次击中。

challenge icon

挑战

中等

顶行的砖块需要击中两次。

  1. 在 Brick 中添加 public int hits = 1;、public Color[] colors;(场景中设置蓝色、橙色和红色),以及 SetHits(int count):设置 hits,并将颜色设为 colors[hits - 1]。
  2. Hit() 会让 hits 减 1:当 hits 为 0 时,砖块会被打碎并计分,否则显示新颜色。
  3. 在 GameManager 中添加 public int[] rowHits = { 2, 1, 1, 1, 1 };,并为每个新砖块调用 brick.SetHits(rowHits[row])。

按下 Play:顶行是橙色,击中后会变成蓝色。然后点击 Check。

亲手试试

using UnityEngine;

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

    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Ball")) Hit();
    }

    public void Hit()
    {
        GameManager.Instance.BrickBroken(this);
        Destroy(gameObject);
    }
}

Unity 游戏:打砖块中的所有课

自己练习: Unity 在线编辑器