首页/ 第 7 章 · 物理系统/ 第 110 课
LESSON 110 · 物理系统

综合练习:打砖块物理小游戏

打砖块完成!物理章毕业。下一章进入输入系统,让玩家“操控”游戏。

⏱ 约 30 分钟📊 难度:入门🗂 第 7 章 · 物理系统📍 第 110 / 300 课
课程进度
110 / 300

🎯本节学习目标

  • 综合运用第 7 章全部知识
  • 独立完成物理小游戏
  • 体验完整项目流程

🚀课程导读

把物理知识做成一个能玩的小游戏:移动挡板、发射球、弹回、消除砖块。这是物理章的毕业项目!

搭建场景

挡板 + 球 + 砖块墙。

  1. 新建场景 Breakout。
  2. 【挡板】Cube 压扁拉长(Scale (2,0.3,0.3)),位置 (0,0.3,0),命名 Paddle。
  3. 给挡板加 Rigidbody,勾选 Is Kinematic(由代码控制)、冻结部分轴。
  4. 【球】Sphere(Scale 0.3),命名 Ball,位置 (0,0.8,0),加 Rigidbody(设速度时用)。
  5. 【砖块】Cube 小方块(Scale (0.8,0.3,0.3)),做成不同颜色的预制体 BrickRed、BrickBlue。
  6. 用 for 循环脚本或手动摆放 3 排砖块(第 53 课批量生成技巧)。
  7. 【相机】Main Camera 摆在球前方上方,俯视整个区域。
💡
物理游戏先摆好“舞台”,再写脚本。

编写逻辑

挡板控制 + 球物理 + 消除砖块。

  1. 【挡板控制脚本 PaddleControl】:
  2. float h = Input.GetAxis("Horizontal");
  3. transform.Translate(h * speed * Time.deltaTime, 0, 0);
  4. (限制在左右边界内:Mathf.Clamp)。
  5. 【球的发射与反弹】给球加刚体,空格发射:
  6. rb.velocity = new Vector3(3, 5, 0); // 斜上方初速
  7. 球碰到挡板/墙/砖块自动反弹(物理碰撞默认)。
  8. 【砖块脚本 Brick】:
  9. void OnCollisionEnter(Collision c) { if (c.gameObject.CompareTag("Ball")) { Destroy(gameObject); } }
  10. 给球加 Tag “Ball”。
  11. 【防止球一直斜飞】让球每次碰撞后速度方向合理(用物理材质 Bounciness=1 保持能量)。
  12. 【失败/胜利】球掉出屏幕(y < -5)则失败重置;砖块清空则胜利。
  13. 【显示】用 UI 显示得分(第 10 章)。
这个游戏用到:刚体、碰撞事件、预制体、Tag、物理材质、Input、Destroy——物理章全复习了。

收尾

打磨与保存。

  1. 给球加物理材质(Bounciness=1)让反弹更稳定。
  2. 给砖块加不同颜色增加视觉。
  3. 加背景音乐与击中音效(第 11 章音频,先可跳过)。
  4. 加“砖块全部消除 → 胜利”的判定与 UI 提示。
  5. 检查 Console 无报错,保存。
  6. 把完成的游戏展示给朋友玩!
  7. 【延伸】加入关卡、特殊砖块(两下才碎)、道具掉落(第 58 课 List 管理)。
💡
完成一个小游戏 = 完整的成就。物理章到此结束,下一章进入输入系统。

常见错误与排查

错误:球越飞越快/越慢?
原因:能量不守恒(摩擦或碰撞损耗)
解决:给球物理材质 Bounciness=1、Friction=0;必要时用代码保持恒定速率:rb.velocity = rb.velocity.normalized * speed;

动手练习

课后小任务(做出来才算真的学会)

  • 完成打砖块游戏的基本玩法
  • 加入得分与胜负判定
  • (进阶)加道具掉落与多关卡

本节小结

打砖块完成!物理章毕业。下一章进入输入系统,让玩家“操控”游戏。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课刚体插值 Interpolation 与抖动消除