---
### 简介
Unity3D 是一个功能强大的游戏开发引擎,适合初学者和专业人士。通过 Unity,我们可以轻松创建一个简单的 2D 或 3D 游戏项目。本文将带你从零开始制作一个简单的小游戏,涵盖基本功能和实现过程。
---
### 游戏概述:方块跳跃
我们将开发一个简单的 2D 游戏,名字为 **“方块跳跃”**。在游戏中,玩家控制一个方块,点击屏幕使其跳跃,避开障碍物。如果方块碰到障碍物,游戏结束。
---
### 一、项目准备
#### 1. 下载并安装 Unity
前往 [Unity官网](https://unity.com/) 下载 Unity Hub 并安装最新版本的 Unity 引擎。
#### 2. 创建新项目
- 打开 Unity Hub,点击“New Project”。
- 选择 **2D** 模板。
- 设置项目名称(例如:**SquareJump**),点击“Create”。
---
### 二、游戏环境搭建
#### 1. 创建基础场景
- 在 `Hierarchy` 面板右键 > `2D Object` > `Sprite` > `Square`,创建一个方块作为玩家角色。
- 命名为 `Player`。
- 设置 `Transform` 属性:
- **Position**:`(0, 0, 0)`
- **Scale**:`(1, 1, 1)`
#### 2. 添加背景
- 在 `Hierarchy` 面板右键 > `2D Object` > `Sprite` > `Square`,创建一个背景。
- 命名为 `Background`。
- 调整大小,覆盖整个场景。
- 修改颜色或添加背景图片。
#### 3. 创建地面
- 在 `Hierarchy` 面板右键 > `2D Object` > `Sprite` > `Square`,作为地面。
- 命名为 `Ground`。
- 设置 `Scale`:`(10, 1, 1)`。
- 调整位置使地面在屏幕底部。
#### 4. 添加障碍物
- 在 `Hierarchy` 面板右键 > `2D Object` > `Sprite` > `Square`,作为障碍物。
- 命名为 `Obstacle`。
- 设置大小和颜色,使其与地面形成对比。
---
### 三、实现游戏逻辑
#### 1. 控制方块跳跃
创建一个脚本控制 `Player`:
- 在 `Assets` 文件夹右键 > `Create` > `C# Script`,命名为 `PlayerController`。
- 将脚本拖到 `Player` 对象上。
**PlayerController.cs**
```csharp
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float jumpForce = 5f;
private Rigidbody2D rb;
private bool isGrounded = true;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
if (Input.GetMouseButtonDown(0) && isGrounded)
{
rb.velocity = Vector2.up * jumpForce;
isGrounded = false;
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
isGrounded = true;
}
}
}
```
- 给 `Player` 添加 `Rigidbody2D` 和 `BoxCollider2D` 组件。
- 给 `Ground` 添加 `BoxCollider2D` 并设置 `Tag` 为 `Ground`。
---
#### 2. 添加障碍物移动
为障碍物创建移动脚本:
- 创建一个新脚本,命名为 `ObstacleController`,并将其拖到 `Obstacle` 对象上。
**ObstacleController.cs**
```csharp
using UnityEngine;
public class ObstacleController : MonoBehaviour
{
public float speed = 5f;
void Update()
{
transform.position += Vector3.left * speed * Time.deltaTime;
if (transform.position.x < -10)
{
Destroy(gameObject);
}
}
}
```
- 创建一个预制体:
- 将 `Obstacle` 对象拖到 `Assets` 文件夹,生成预制体。
- 删除场景中的 `Obstacle`。
---
#### 3. 障碍物生成
创建一个障碍物生成器:
- 在 `Assets` 文件夹创建一个新脚本,命名为 `ObstacleSpawner`。
- 将脚本挂载到空对象(右键 `Hierarchy` 面板 > `Create Empty`)。
**ObstacleSpawner.cs**
```csharp
using UnityEngine;
public class ObstacleSpawner : MonoBehaviour
{
public GameObject obstaclePrefab;
public float spawnRate = 2f;
private float timer = 0f;
void Update()
{
timer += Time.deltaTime;
if (timer >= spawnRate)
{
Instantiate(obstaclePrefab, new Vector3(10, -2, 0), Quaternion.identity);
timer = 0f;
}
}
}
```
- 将 `Obstacle` 预制体拖到 `ObstacleSpawner` 的 `obstaclePrefab` 字段。
---
### 四、优化与完善
#### 1. 添加游戏结束逻辑
在 `PlayerController.cs` 中添加碰撞检测:
```csharp
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Ground"))
{
isGrounded = true;
}
else if (collision.gameObject.CompareTag("Obstacle"))
{
Debug.Log("Game Over!");
Time.timeScale = 0; // 暂停游戏
}
}
```
- 将 `Obstacle` 的 `Tag` 设置为 `Obstacle`。
#### 2. 添加分数系统
创建一个新脚本 `ScoreManager`:
```csharp
using UnityEngine;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour
{
public Text scoreText;
private int score = 0;
void Update()
{
score += 1;
scoreText.text = "Score: " + score.ToString();
}
}
```
- 在场景中添加 `UI > Text` 作为分数显示。
- 将 `ScoreManager` 挂载到一个空对象,并将 `Text` 对象拖到 `ScoreManager` 的 `scoreText` 字段。
---
### 五、导出与运行
#### 1. 测试游戏
- 点击 Unity 顶部的 **Play** 按钮测试游戏。
- 检查障碍物生成、方块跳跃和游戏结束功能是否正常。
#### 2. 构建项目
- 前往 `File > Build Settings`,选择目标平台(如 `PC, Mac & Linux` 或 `Android`)。
- 点击 `Build`,生成可运行文件。
---
### 六、总结
通过本项目,你已经学习了以下技能:
1. 创建和配置 Unity 场景。
2. 编写基本的游戏逻辑(跳跃、移动、生成等)。
3. 使用预制体和脚本实现动态功能。
4. 添加简单的分数系统和游戏结束机制。
这个小游戏可以进一步扩展,如添加多种障碍物、音效、角色皮肤等。快试试在此基础上创建属于你自己的游戏吧!