本文将创建一个简单的 Unity 项目,使一个 2D 小球可以通过键盘输入实现左右移动和跳跃功能。非常适合初学者了解物理引擎、输入检测以及 Unity 脚本编写的基本用法。
🔄 最终效果
- 一个 2D 小球可以通过键盘 A/D 或方向键 ←/→ 左右移动。
- 按下空格键,球会向上跳跃。
- 所有的运动与跳跃行为都由自定义的 C# 脚本控制。

🎨 第一步 – 创建场景
创建小球的 2D 精灵:
- 在 Unity 的 Hierarchy 中右键 → 选择
2D Object
→Sprite
→Circle
,命名为Ball
。 - 给 Ball 添加
Rigidbody2D
和CircleCollider2D
组件。
创建地面对象:
- 再次右键 →
2D Object
→Sprite
→Square
,分别命名为VGround
和HGround
。 - 将其拉宽并放置在场景底部作为地面。
- 添加
BoxCollider2D
组件使其具有碰撞属性。
参考上一篇文章了解细节:[Unity 实践教程 0004 – Unity Rigidbody – Wonderful Code See]
💻 第二步 – 编写移动与跳跃脚本
创建脚本 BallScript.cs:
- 创建新的 C# 脚本
BallScript.cs
。 - 将其挂载到
Ball
游戏对象上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BallScript : MonoBehaviour
{
public Rigidbody2D rb;
public float moveSpeed;
public float jumpForce;
private float xInput;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// Get horizontal input
xInput = Input.GetAxis("Horizontal");
// Apply horizontal movement
rb.velocity = new Vector2(xInput * moveSpeed, rb.velocity.y);
// Jump on Space key press
if (Input.GetKeyDown(KeyCode.Space))
{
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
}
}
}
🛠 第三步 – 在 Inspector 设置引用
- 将 Ball 游戏对象拖动到脚本中
rb
字段的位置。
▶️ 第四步 – 运行场景
点击 Play 按钮,使用键盘:
- 按下 A/D 或 ←/→ 让小球左右移动。
- 按下空格键,小球会跳起来(前提是它在地面上)。
✅ 总结
你已经实现了一个简单但功能完整的 2D 小球移动和跳跃系统。这为开发横版平台游戏、侧滚类游戏或物理实验项目打下了良好的基础。
🧠 进阶:逐行代码详解
xInput = Input.GetAxis("Horizontal");
- 目的:读取玩家的水平输入。
- 工作原理:
- Unity 内置的 “Horizontal” 轴映射如下:
- A 或 ←:返回 -1
- D 或 →:返回 +1
- 没有按键:返回 0
- 同时会自动进行加速/减速的平滑处理。
- Unity 内置的 “Horizontal” 轴映射如下:
- 结果:xInput 是一个 -1 到 1 之间的浮点数,表示输入方向与强度。
rb.velocity = new Vector2(xInput * moveSpeed, rb.velocity.y);
- 目的:让小球在水平方向移动。
- 解释:
rb
是关联的 Rigidbody2D 组件。rb.velocity
设置对象当前速度。new Vector2(...)
创建一个二维速度向量。
- 细节:
xInput * moveSpeed
决定 X 轴的速度。- 例如:xInput=1 且 moveSpeed=5,则速度为向右 5。
rb.velocity.y
保留 Y 方向原有速度(如跳跃或重力)。
- 结果:小球左右移动时不影响垂直方向。
if (Input.GetKeyDown(KeyCode.Space))
- 目的:检测是否按下了空格键。
- 区别:
GetKeyDown
:只在按下键的第一帧返回 true。GetKey
:在按住键时每一帧都返回 true。GetKeyUp
:在释放按键时返回 true。
- 用途:适合用来触发“只跳一次”的跳跃操作。
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
- 目的:通过设置垂直速度使小球跳跃。
- 解释:
rb.velocity.x
保留水平方向移动。jumpForce
(通常是正值)决定跳跃高度。
- 注意:这段代码没有检测小球是否在地面上,因此会出现“无限跳跃”问题。要解决这个问题,需要加入地面检测逻辑。