Unity 迷你足球
发布: (2025年12月11日 GMT+8 01:47)
6 min read
原文: Dev.to
Source: Dev.to
1. 场地平面 (Plane)
- Hierarchy → 右键 → 3D Object → Plane
- Inspector 设置:
- Name:
Ground - Position: X = 0, Y = 0, Z = 0
- Scale: X = 2, Y = 1, Z = 3
- Name:
2. 创建绿色材质
- Project → 右键 → Create → Material
- Name:
GrassMaterial - Inspector → Albedo:选择绿色
#2D7A2F - 将材质拖拽到 Ground 对象上。
✅ 结果: 绿色足球场已完成!
3. 建造围墙
3.1 左墙
- Hierarchy → 右键 → 3D Object → Cube
- Inspector:
- Name:
WallLeft - Position: X = ‑10, Y = 0.5, Z = 0
- Scale: X = 0.2, Y = 1, Z = 30
- Name:
3.2 右墙
- Hierarchy → 右键 → 3D Object → Cube
- Inspector:
- Name:
WallRight - Position: X = 10, Y = 0.5, Z = 0
- Scale: X = 0.2, Y = 1, Z = 30
- Name:
3.3 背墙(玩家侧)
- Create Cube → Name:
WallBack - Position: X = 0, Y = 0.5, Z = ‑15
- Scale: X = 20, Y = 1, Z = 0.2
3.4 前墙(对手侧)
- Create Cube → Name:
WallFront - Position: X = 0, Y = 0.5, Z = 15
- Scale: X = 20, Y = 1, Z = 0.2
3.5 墙体材质
- Create → Material → Name:
WallMaterial - Albedo: 选择灰色或红色
- 将材质应用到四面墙上。
✅ 结果: 4 面墙围成的封闭场地!
4. 创建球体
4.1 球体对象
- Hierarchy → 3D Object → Sphere
- Inspector:
- Name:
Ball - Position: X = 0, Y = 0.5, Z = 0
- Scale: X = 0.5, Y = 0.5, Z = 0.5
- Name:
4.2 球体材质
- Create → Material → Name:
BallMaterial - Albedo: 白色
- 将材质应用到 Ball 对象上。
4.3 添加物理
- 选中 Ball → Inspector → Add Component → Rigidbody
- Rigidbody 设置:
- Mass: 0.5
- Drag: 0.5
- Angular Drag: 0.5
- Use Gravity: ✅
4.4 球体物理材质
- Project → Create → Physics Material → Name:
BallPhysics - Inspector:
- Dynamic Friction: 0.6
- Static Friction: 0.6
- Bounciness: 0.3
- Friction Combine: Average
- Bounce Combine: Average
- 选中 Ball → Rigidbody → Material → 指定 BallPhysics。
5. 创建玩家(胶囊体)
5.1 添加玩家对象
- Hierarchy → 3D Object → Capsule
- Inspector:
- Name:
Player - Position: X = 0, Y = 1, Z = ‑10
- Scale: X = 1, Y = 1, Z = 1
- Name:
5.2 玩家材质
- Create → Material → Name:
PlayerMaterial - Albedo: 蓝色
#0066FF - 将材质应用到 Player 对象上。
5.3 添加物理
- 选中 Player → Add Component → Rigidbody
- Rigidbody 设置:
- Mass: 2
- Drag: 2
- Angular Drag: 5
- Use Gravity: ✅
- Constraints: 冻结 X、Y、Z 轴的旋转。
5.4 调整胶囊碰撞体
- Player 已自带 Capsule Collider。
- Radius: 0.5
- Height: 2
✅ 结果: 蓝色玩家已就绪!
6. 添加 Tag
6.1 球的 Tag
- 选中 Ball 对象。
- 在 Inspector 中点击 Tag 下拉框 → Add Tag… → + → Name:
Ball。 - 保存后重新选中 Ball,将 Tag 设置为
Ball。
6.2 玩家 Tag
- 选中 Player,将 Tag 设置为
Player。 - 若不存在该 Tag,先通过 Add Tag… 创建,名称为
Player。
7. 相机设置
- 选中 Main Camera。
- Transform:
- Position: X = 0, Y = 15, Z = ‑12
7.1 相机脚本 (CameraFollow)
- 将
CameraFollow脚本拖到 Main Camera 上。 - 在脚本组件中:
- Target: 拖入 Player 对象。
- Offset: X = 0, Y = 15, Z = ‑12
- Smooth Speed: 5
8. 创建球门
8.1 玩家球门(下方)
- Hierarchy → Create Empty → Name:
GoalPlayer - Position: X = 0, Y = 0, Z = ‑14
在 GoalPlayer 下创建三个 Cube 对象并指定材质:
- Create → Material → Name:
GoalPostMaterial→ Albedo: 白色 - 将材质应用到三个立方体上。
8.2 对手球门(上方)
- 复制 GoalPlayer(Ctrl + D)。
- Rename:
GoalAI - Position: X = 0, Y = 0, Z = 14
✅ 结果: 两个球门已完成!
9. 创建进球触发器
9.1 玩家触发器
- 选中 GoalPlayer → 右键 → 3D Object → Cube
- Name:
GoalTriggerPlayer - Position: X = 0, Y = 1, Z = 0.5
- Scale: X = 6, Y = 2, Z = 0.5
触发器设置:
- 添加 Box Collider → 勾选 Is Trigger。
- 禁用 Mesh Renderer(使其不可见)。
9.2 AI 触发器
- 复制 GoalTriggerPlayer(Ctrl + C)。
- 选中 GoalAI,粘贴为子对象(Ctrl + V)。
- Rename:
GoalTriggerAI - Position: X = 0, Y = 1, Z = ‑0.5
9.3 添加 Tag
- 创建 Tag
GoalPlayer与GoalAI(若不存在)。 - 将
GoalPlayerTag 赋给 GoalTriggerPlayer,GoalAITag 赋给 GoalTriggerAI。
10. 进球系统脚本
// GoalDetector.cs
using UnityEngine;
public class GoalDetector : MonoBehaviour
{
private GameManager gameManager;
void Start()
{
gameManager = FindObjectOfType();
}
// Add trigger handling logic here...
}
- 将 GoalDetector 脚本挂到 GoalTriggerPlayer 并勾选 Is Player Goal。
- 再将另一个 GoalDetector 挂到 GoalTriggerAI,保持 Is Player Goal 未勾选。
11. 游戏管理器(计分系统)
// GameManager.cs
using UnityEngine;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
public Text playerScoreText;
public Text aiScoreText;
public GameObject ball;
// Implement scoring logic here...
}
- 创建一个空的 GameObject,命名为
GameManager。 - 将
GameManager.cs脚本拖到该对象上。
12. 创建 UI(显示比分)
12.1 Canvas 设置
- Render Mode: Screen Space – Overlay
- Canvas Scaler → UI Scale Mode: Scale With Screen Size
- Reference Resolution: 1920 × 1080
12.2 玩家比分(左上角)
- Canvas → 右键 → UI → Text → Name:
PlayerScoreText - Rect Transform:
- Anchor: Top‑Left
- Pos X: 100, Pos Y: ‑50
- Width: 200, Height: 100
- Text component:
- Text:
0 - Font Size: 72
- Alignment: Center
- Color: 蓝色
- Text:
12.3 AI 分数(右上角)
- Canvas → 右键 → UI → Text → Name:
AIScoreText - Rect Transform:
- Anchor: Top‑Right
- Pos X: ‑100, Pos Y: ‑50
- Width: 200, Height: 100
- Text component:
- Text:
0 - Font Size: 72
- Alignment: Center
- Color: 红色
- Text:
12.4 将 UI 绑定到 GameManager
- 选中 GameManager → 在 Inspector 中分配:
- Player Score Text: 拖入
PlayerScoreText - AI Score Text: 拖入
AIScoreText - Ball: 拖入 Ball 对象
- Player Score Text: 拖入
✅ 测试:
- 进球后比分是否增加? ✅
- 球是否会回到中心? ✅
- 分数是否在屏幕上显示? ✅
13. 保存场景
- File → Save As… → 为场景起一个合适的名字(例如
GameScene)。
14. 创建主菜单场景
14.1 新建场景
- File → New Scene
14.2 添加 UI
- Hierarchy → 右键 → UI → Canvas
14.3 添加按钮
- 在 Canvas 下:右键 → UI → Button - TextMeshPro(创建 START、EXIT 等按钮)。
14.4 MenuManager 脚本
- 将
MenuManager脚本挂到 Canvas 上,并配置按钮功能(START → 加载游戏场景,EXIT → 退出应用)。
15. 构建设置
- File → Build Settings(Ctrl + Shift + B)
- 按顺序添加场景:
MainMenu(索引 0)GameScene(索引 1)
✅ 测试: 从 MainMenu 场景运行游戏。
16. 暂停菜单
16.1 暂停 UI
- 打开 GameScene → Hierarchy → 右键 → UI → Canvas
- 在 Canvas 下添加一个 Panel(命名为
PausePanel)。 - 在
PausePanel下添加 Button(如 RESUME、MENU、RESTART)。
16.2 隐藏 PausePanel
- 选中
PausePanel,默认将其禁用(取消勾选 GameObject)。
16.3 PauseManager 脚本
- 将
PauseManager脚本挂到 Canvas 上。 - 配置按钮功能:
- RESUME:
PauseManager.ResumeGame() - MENU: 加载 MainMenu 场景
- RESTART: 重新加载当前游戏场景
- RESUME:
✅ 测试: 游戏进行中按 ESC → 暂停菜单出现。
- RESUME 继续游戏。
- MENU 返回主菜单。
- RESTART 重新开始游戏。