坚固的砖块
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[] 中每行对应一个数字,从顶行开始排列,这样顶行就能比其他行承受更多次击中。
挑战
中等顶行的砖块需要击中两次。
- 在
Brick中添加public int hits = 1;、public Color[] colors;(场景中设置蓝色、橙色和红色),以及SetHits(int count):设置 hits,并将颜色设为colors[hits - 1]。 Hit()会让 hits 减 1:当 hits 为 0 时,砖块会被打碎并计分,否则显示新颜色。- 在
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 在线编辑器