Unity 游戏开发入门:编辑器与 C# 脚本
初识 Unity 编辑器
Unity 编辑器是创建游戏的核心工作区,它采用模块化布局,所有功能窗口都可以自由拖拽和停靠。刚启动时,默认布局包含五大核心面板:
- 场景视图 (Scene View):用于可视化构建和布置游戏世界,你可以像操作 3D 建模软件一样移动、旋转、缩放物体。
- 游戏视图 (Game View):模拟最终游戏画面的窗口,通过挂载的摄像机进行渲染。只有点击顶部中间的“播放”按钮后,这里才会实时显示游戏运行效果。
- 层级窗口 (Hierarchy):以树状结构列出当前场景中的所有游戏对象。可以直接在这里拖拽改变父子关系,或右键快速创建基础对象。
- 项目窗口 (Project):相当于资源管理器,存放所有图片、模型、材质、脚本等资产。通常会将资源按文件夹分类(如 Scripts、Textures、Models、Scenes),便于管理。
- 检视窗口 (Inspector):这是最重要的面板之一。选中任意游戏对象或资源后,这里会显示其所有组件属性和设置。挂载脚本、调整物理参数、修改颜色等操作都在此进行。
管理布局
如果不慎将窗口关掉或弄乱,可以通过顶部菜单 Window > Layouts 选择预设布局(如“Default”)或保存自己的自定义布局。熟练切换 Scene 和 Game 视图是开发的基础操作。
创建第一个项目与场景
启动 Unity Hub,点击“新建项目”,选择 3D Core 模板(同样适用于 2D 游戏,稍后可在编辑器中切换),设定项目名称与存储位置后创建。项目打开后,首要任务是保存场景:File > Save As,将场景命名为 MainScene 并存入 Scenes 文件夹。
构建简单世界
- 添加地面:在 Hierarchy 窗口右键,选择
3D Object > Plane,将其重命名为Ground。为了视觉参考,我们可以创建一个材质:在 Project 窗口右键Create > Material,命名为GroundMat,在 Inspector 中调整其颜色,然后将材质拖拽到Ground上。 - 放置玩家对象:同样通过右键
3D Object > Capsule创建一个胶囊体代表玩家,命名为Player,将其 Position 的 Y 值设为 1,使之站立在地面上。为了让摄像机跟随它,将Main Camera拖拽成为Player的子物体,然后调整摄像机的相对位置(比如0, 2, -5)。 - 添加光源:通常场景自带定向光
Directional Light,类似太阳光。如果删除,可以重新创建:右键Light > Directional Light,并调整其旋转角度来改变光照方向。
理解游戏对象与组件
Unity 遵循 实体-组件 架构。每个存在于场景中的物体都是“游戏对象 (GameObject)”,其本身只是一个空的容器,真正的行为由挂载的 组件 (Component) 提供。例如,一个 Cube 自动带有 Transform(位置、旋转、缩放)和 Mesh Filter/Renderer(显示形状)组件;添加 Rigidbody 组件会赋予物理属性,添加 Audio Source 则会播放声音。在 Inspector 中可以随时添加或移除组件,也可以将脚本(一种自定义组件)拖放到对象上。
C# 脚本入门:赋予物体生命
脚本是游戏的核心逻辑载体,Unity 使用 C# 语言。所有脚本都要继承自 MonoBehaviour,这是 Unity 提供的基础类,负责与游戏引擎通信。
创建与挂载脚本
在 Project 窗口右键 Create > C# Script,命名为 PlayerController,双击打开(推荐使用 Visual Studio 或通过 Unity Hub 安装的默认编辑器)。生成的模板包含两个关键方法:
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// Start 在游戏对象激活后的第一帧之前调用一次
void Start()
{
}
// Update 每帧调用一次,大部分持续逻辑写在这里
void Update()
{
}
}
编写完成后保存,将脚本文件从 Project 窗口直接拖到 Hierarchy 中的 Player 对象上,即可让该脚本成为 Player 的一个组件。此时 Player 就具备了脚本定义的行为。
实现移动控制
以下脚本展示了如何通过键盘输入控制胶囊体移动,内嵌详细注释:
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// 公共变量会暴露在 Inspector 面板中,便于调整
public float speed = 5f; // 移动速度
private Rigidbody rb; // 物理体引用
void Start()
{
// 获取当前物体上的 Rigidbody 组件
rb = GetComponent<Rigidbody>();
}
void Update()
{
// 获取水平与垂直输入,返回 -1 到 1 之间的值
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
// 根据摄像机朝向计算移动方向,这里简单使用世界坐标
Vector3 movement = new Vector3(horizontal, 0f, vertical).normalized;
// 直接设置速度实现物理移动
Vector3 velocity = movement * speed;
// 保持原有的垂直速度(如重力影响),仅修改平面速度
rb.linearVelocity = new Vector3(velocity.x, rb.linearVelocity.y, velocity.z);
}
}
挂载此脚本到 Player 并确保该对象有 Rigidbody 组件(通过 Inspector 添加),点击播放按钮后,即可用 W、A、S、D 或方向键控制移动。
常用事件方法简介
除 Start() 和 Update() 外,MonoBehaviour 还提供许多生命周期方法,按需选用:
Awake():在对象实例化时调用,比Start()更早,适合组件引用初始化。FixedUpdate():固定时间间隔调用(默认 0.02 秒),用于物理相关计算(如修改 Rigidbody)。LateUpdate():所有Update()执行完毕后调用,常用于摄像机跟随。OnCollisionEnter()/OnTriggerEnter():处理物理碰撞与触发检测。
调试与 Play Mode 快速迭代
点击编辑器顶部的 播放按钮 进入 Play Mode,场景开始运行,可以在 Scene 视图中实时观察物体变化,同时在 Inspector 中查看并动态修改变量值(比如调整 speed)。注意:在 Play Mode 下对场景所做的任何修改,一旦退出播放模式都会被重置,避免意外损失。因此通常只在 Play Mode 中测试临时数值,想永久保存需先停止播放再修改或通过脚本序列化。
Console 窗口(Window > General > Console)是调试利器。在脚本中使用 Debug.Log("信息") 可以输出消息,双击错误信息可直接定位到代码行。
保存与构建
完成基本功能后,记得保存场景(Ctrl+S)和整个项目。若想打包成可执行程序,通过 File > Build Settings,添加要构建的场景,选择目标平台(PC, Mac & Linux Standalone),点击“Build”生成 .exe 或相应文件。首次构建需安装对应平台的 Build Support,可通过 Unity Hub 添加模块。
下一步学习
- 预制体 (Prefab):保存游戏对象模板,可在多个场景复用并统一修改。
- 动画系统:使用 Animation 和 Animator Controller 制作角色动画。
- UI 系统:创建血条、按钮、文本等用户界面。
- 资源商店 (Asset Store):获取免费或付费模型、音效、插件,加速开发。
通过掌握编辑器布局、游戏对象与组件的关系以及基础 C# 脚本,你已经迈出了 Unity 游戏开发最关键的第一步。不断动手实践并查阅官方文档,很快你就能制作出完整的游戏作品。