击碎
Coddy Unity 游戏:打砖块 课程的第 6 课,共 19 课。
砖块没有 Rigidbody,但球有,而且在发生碰撞时,Unity 会向两个物体都发送 OnCollisionEnter。因此,砖块可以自行检测到撞击。在砖块的脚本中,gameObject 是砖块,而 collision.gameObject 是撞到它的物体。
分数由 GameManager 管理,而砖块是预制体的副本。预制体是场景之外的资源,因此它的字段无法在 Inspector 中指向场景里的 GameManager。GameManager 会在 Awake() 中将静态的 GameManager.Instance 设为自身,这样任何脚本都能访问它,预制体副本也可以。
玩家撞上时会碎裂的花瓶:
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Player")) Shatter();
}
public void Shatter()
{
Destroy(gameObject);
}Destroy(gameObject) 会移除花瓶。Destroy(collision.gameObject) 会移除玩家,而 Destroy(this) 只会移除脚本,花瓶仍会立在那里。把碎裂逻辑放在它自己的 public 方法中,其他代码也能让花瓶碎裂,比如炸弹或强化道具。
挑战
中等球会击碎砖块,并获得相应的分数。
- 在
GameManager中,添加int score;和public void BrickBroken(Brick brick),让它把brick.points加到分数中。 - 在
Brick中,编写public void Hit():GameManager.Instance.BrickBroken(this);,然后执行Destroy(gameObject); - 在 Brick 的
OnCollisionEnter中,当对象带有Ball标签时,调用Hit()。
按下“开始”并发射球:球击中的每块砖都会消失。然后点击“检查”。
亲手试试
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// 接下来:球击碎一块砖,并获得这块砖对应的分数。
}
Unity 游戏:打砖块中的所有课
自己练习: Unity 在线编辑器