Unity基础:创建你的第一个游戏物体——Cube、Sphere与基本3D物体

Unity基础:创建你的第一个游戏物体------Cube、Sphere与基本3D物体

大家好,欢迎回到Unity教程系列。前面几篇文章我们打好了理论基础------了解了GameObject与Component的架构、掌握了编辑器六大视图的操作、熟悉了Transform组件。今天这篇文章,我们要把这些理论付诸实践,真正动手在Unity中创建和操作游戏物体。

这篇文章的氛围和前几篇不同------理论少一些,实操多一些。我会带着你一步步创建3D物体、排布场景、添加材质、制作简单的小作品。请打开Unity编辑器,跟着我一起操作。动手做一遍,比看十遍文章更有效。

一、认识Unity内置的3D基本体

1.1 什么是基本体(Primitive)

💡 基本体(Primitive)是Unity内置的最简单的3D几何形状。它们不需要从外部导入模型,直接在Unity编辑器中就能创建,非常适合快速搭建场景原型(Prototype)和学习基本操作。

Unity提供了六种3D基本体,每种都有预设的网格数据:

1.2 Cube(立方体)

Cube是最常用的基本体。默认创建出来的Cube边长为1单位(1米),包含8个顶点和12个三角形(6个面,每个面2个三角形)。

典型用途

  • 搭建场景原型(墙壁、地板、平台)
  • 制作简单的方块形道具
  • 作为碰撞检测的临时替身

创建方式:GameObject菜单 → 3D Object → Cube,或在Hierarchy中右键 → 3D Object → Cube。

1.3 Sphere(球体)

Sphere默认半径为0.5单位(直径为1单位)。Unity的球体由经纬线网格组成,默认面数较多,表面看起来比较光滑。

典型用途

  • 制作球、弹珠、炸弹等球形物体
  • 作为角色的简化碰撞体
  • 制作行星、水晶球等

1.4 Capsule(胶囊体)

Capsule是一个圆柱体两端各连接半个球体的形状。默认高度为2单位,半径为0.5单位。胶囊体的形状天然适合角色的碰撞检测------它能很好地贴合人形角色的身体轮廓,而且没有尖锐的边角,在斜坡和台阶上的移动表现比Box Collider更平滑。

💡 实际上,Unity标准的第一人称和第三人称角色控制器默认都使用Capsule Collider。

1.5 Cylinder(圆柱体)

Cylinder默认高度为2单位,半径为0.5单位。它是一个两端为平面的柱体。适合制作柱子、树干、桶等。

1.6 Plane(平面)

Plane是一个10×10单位的大平面,由大量的网格细分组成(默认10×10个顶点段)。⚠️ 注意Plane不是Quad------Plane有非常多的三角形(200个),主要适合做地形和地面,不适合做UI背景(用Quad更合适)。

1.7 Quad(四边形)

Quad是最简单的四边形------只有4个顶点和2个三角形。它是一个1×1单位的小平面,朝向Z轴正方向(也就是"站立"的)。Quad非常适合用做2D精灵的载体或简单的背景平面。

📝 Quad和Plane的区别很容易搞混。简单记:Plane是"地面"(水平放置、面朝上、面数多),Quad是"画板"(竖直放置、面朝前、只有2个面)。

二、动手创建你的第一个场景

2.1 创建地面

让我们从一个最简单的场景开始------一个带有地面、墙壁、和几个物体的简单场景。

① 在Hierarchy中右键 → 3D Object → Plane,创建一个平面。

② 在Inspector中将其重命名为"Ground"(选中后按F2或直接点击名称编辑)。

③ 将Position设为 (0, 0, 0),这是场景的原点位置。

④ 将Scale设为 (1, 1, 1),保持默认大小。如果需要更大的地面,可以把Scale改为 (2, 1, 2)。

2.2 创建墙壁

我们来搭建一个简单的墙体结构:

① 创建第一个Cube:右键 → 3D Object → Cube,命名为"Wall_North"。

② 设置Wall_North的Position为 (0, 2, -5),Scale为 (10, 4, 0.5)。

③ 选中Wall_North,按Ctrl+D复制,命名为"Wall_South"。

④ 设置Wall_South的Position为 (0, 2, 5)。

⑤ 创建Wall_East:Position为 (5, 2, 0),Scale为 (0.5, 4, 10)。

⑥ 创建Wall_West:Position为 (-5, 2, 0),Scale为 (0.5, 4, 10)。

现在你已经有了四面墙壁,围成了一个10×10的房间。

2.3 在场景中放置物体

① 创建一个Sphere:右键 → 3D Object → Sphere,命名为"Ball"。

② 设置Ball的Position为 (0, 1, 0),让它浮在地面上方。

③ 创建一个Cylinder,命名为"Pillar"。

④ 设置Pillar的Position为 (3, 2, 3),Scale为 (1, 2, 1)。

⑤ 创建两个Cube放在角落,作为"箱子"。

2.4 Scene视图导航练习

在搭建场景的过程中,不断练习上一篇学到的Scene视图导航:

  • 按F键聚焦到某个选中的物体
  • 右键拖动旋转视角,从各个角度观察你的建筑
  • 滚轮缩放查看细节
  • 中键拖动平移视角
  • 右键+WASD进行飞行漫游

✅ 到这个步骤,你应该已经能在Scene视图中看到一个简单的小房间结构了。

三、添加颜色------Material材质入门

3.1 为什么需要材质

你可能注意到了------所有创建的物体都是白色的(默认材质)。如果想让它们有不同的颜色,就需要用到材质(Material)。这里先做一个简单的材质操作体验,后续有专门的文章深入讲解。

3.2 创建并应用材质

① 在Project窗口中,右键 → Create → Material,创建一个新材质。

② 命名为"Mat_Red"。

③ 在Inspector中,点击Albedo(基色)旁边的白色矩形。

④ 在弹出的颜色选择器中选择红色,关闭颜色选择器。

⑤ 将材质从Project窗口拖到Scene视图中的某个物体上------物体会变成红色。

⑥ 重复以上步骤创建Mat_Blue(蓝色)、Mat_Green(绿色)等不同颜色的材质。

💡 你可以尝试修改材质的其他属性:

  • Metallic(金属度):0是非金属,1是完全金属
  • Smoothness(光滑度):0是粗糙表面,1是完全镜面反射
  • 调整这两个值能明显改变物体的视觉质感

3.3 给场景上色

给场景中的物体赋予不同的颜色:

  • Ground(地面):深灰色材质
  • 四面墙壁:分别赋予浅灰或不同颜色
  • Ball(球体):红色,Metallic设为0.5,看起来像金属球
  • Pillar(柱子):深棕色

现在你的场景应该有模有样了。

四、物体的基本操作

4.1 移动物体

使用Translate工具(W键),在Scene视图中拖拽物体:

  • 拖拽红色箭头 → 沿X轴移动
  • 拖拽绿色箭头 → 沿Y轴移动(上下)
  • 拖拽蓝色箭头 → 沿Z轴移动
  • 拖拽两个箭头之间的方片 → 在平面上自由移动

可以在Inspector中直接输入Position的精确数值来进行精确定位。

4.2 旋转物体

使用Rotate工具(E键):

  • 拖拽红色圆环 → 绕X轴旋转
  • 拖拽绿色圆环 → 绕Y轴旋转
  • 拖拽蓝色圆环 → 绕Z轴旋转
  • 按住Ctrl拖动 → 按15度增量旋转

4.3 缩放物体

使用Scale工具(R键):

  • 拖拽红色方块 → 沿X轴缩放
  • 拖拽绿色方块 → 沿Y轴缩放
  • 拖拽蓝色方块 → 沿Z轴缩放
  • 拖拽中心灰色方块 → 等比例缩放

4.4 物体的选择、复制与删除

操作 方法
单选 点击物体
多选 Ctrl+点击 或 框选拖拽
复制 Ctrl+D(Duplicate)
删除 Delete键 或 右键→Delete
重命名 F2键 或 点击已选中物体的名称

4.5 顶点吸附与网格吸附

💡 两个提高场景搭建精度的实用技巧:

顶点吸附(Vertex Snapping):在移动工具(W键)激活的状态下,按住V键不放,将鼠标移到物体的某个顶点上(出现白色方块),然后拖动到另一个物体的顶点附近,两个顶点会自动对齐。

这个功能在需要精确拼接墙面、地板等模块化场景时非常有用。

网格吸附(Grid Snapping)

  • 按住Ctrl拖动 → 按世界网格的单位间隔移动
  • Edit > Grid and Snap Settings 中设置网格大小
  • 默认网格大小为1单位

五、用代码控制物体

5.1 创建一个控制脚本

现在让我们写点代码,让场景中的物体动起来。在Project窗口中创建Scripts文件夹,然后在其中创建C#脚本:

① 右键 → Create → C# Script,命名为"Rotator"。

② 双击打开脚本,在IDE中编写以下代码:

csharp 复制代码
using UnityEngine;

public class Rotator : MonoBehaviour
{
    [SerializeField] private float speed = 30f;
    [SerializeField] private Vector3 rotationAxis = Vector3.up;
    
    void Update()
    {
        // 每帧绕指定轴旋转
        transform.Rotate(rotationAxis * speed * Time.deltaTime);
    }
}

③ 将Rotator脚本从Project窗口拖到场景中的Sphere上。

④ 点击Play按钮(▶),观察球体旋转。

⑤ 在Inspector中修改speed值(比如改为100),观察旋转速度的变化。

⑥ 修改rotationAxis为 (1, 1, 0),观察旋转轴的变化。

5.2 创建一个移动脚本

创建第二个脚本"Oscillator":

csharp 复制代码
using UnityEngine;

public class Oscillator : MonoBehaviour
{
    [SerializeField] private float amplitude = 2f;
    [SerializeField] private float frequency = 1f;
    
    private Vector3 startPosition;
    
    void Start()
    {
        startPosition = transform.position;
    }
    
    void Update()
    {
        // 使用正弦波做上下往复运动
        float newY = startPosition.y + Mathf.Sin(Time.time * frequency) * amplitude;
        transform.position = new Vector3(startPosition.x, newY, startPosition.z);
    }
}

将Oscillator脚本挂载到Ball或其他物体上,运行游戏观察效果。

5.3 创建一个完整的控制器

让我们创建一个可以用键盘控制的物体:

csharp 复制代码
using UnityEngine;

public class SimpleController : MonoBehaviour
{
    [SerializeField] private float moveSpeed = 5f;
    [SerializeField] private float turnSpeed = 100f;
    
    void Update()
    {
        // 前后左右移动
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        
        Vector3 movement = new Vector3(horizontal, 0, vertical) * moveSpeed * Time.deltaTime;
        transform.Translate(movement, Space.World);
        
        // 旋转
        if (Input.GetKey(KeyCode.Q))
        {
            transform.Rotate(Vector3.down * turnSpeed * Time.deltaTime);
        }
        if (Input.GetKey(KeyCode.E))
        {
            transform.Rotate(Vector3.up * turnSpeed * Time.deltaTime);
        }
    }
}

六、组织场景------使用空GameObject

6.1 为什么需要组织

当场景中的物体越来越多,Hierarchy窗口会变得杂乱。你可以用空GameObject来组织场景结构:

① 创建空GameObject(右键 → Create Empty),命名为"--- WALLS ---"。

② 将四面墙壁拖到 --- WALLS --- 下成为子物体。

③ 创建另一个空GameObject命名为"--- PROPS ---"。

④ 将球体、圆柱体等道具拖到 --- PROPS --- 下。

现在Hierarchy的结构变得清晰了:

复制代码
SampleScene
├── Main Camera
├── Directional Light
├── Ground
├── --- WALLS ---
│   ├── Wall_North
│   ├── Wall_South
│   ├── Wall_East
│   └── Wall_West
├── --- PROPS ---
│   ├── Ball
│   ├── Pillar
│   └── Box_01
└── --- SCRIPTS ---(可选,挂在管理器脚本)

6.2 组织节点的好处

  • Hierarchy干净整洁,快速定位物体
  • 通过移动组织节点(如--- WALLS ---),可以批量移动整个组
  • 折叠不需要操作的分组,减少视觉干扰

七、完整场景挑战

7.1 搭建一个小型城堡

应用本文所学的全部知识,试着搭建一个小型城堡场景:

① 用Plane做地面(Scale加大)

② 用多个Cube搭建城墙和塔楼

③ 用Cylinder做塔楼的柱子

④ 用Sphere做塔楼的穹顶

⑤ 用不同的颜色材质给各部分上色

⑥ 用空GameObject组织各个建筑结构

⑦ 创建几个脚本让某些部分动起来(旋转的旗帜、上下浮动的魔法球等)

7.2 检查清单

完成挑战后,对照以下列表检查:

  • 场景中至少有10个不同的GameObject
  • 使用了至少3种不同的基本体
  • 创建并应用了至少5种不同的材质颜色
  • Hierarchy中有清晰的分组结构
  • 至少有一个物体挂载了自定义脚本
  • 点击Play后场景有动态效果

八、本篇总结

✅ 本文核心知识点回顾:

  • Unity提供六种3D基本体:Cube、Sphere、Capsule、Cylinder、Plane、Quad
  • 使用Transform工具(W/E/R)操作物体的位置、旋转和缩放
  • Material材质决定物体的外观颜色和质感
  • Scrip脚本挂载到GameObject上赋予其动态行为
  • 空GameObject是组织场景结构的重要工具
  • Ctrl+D复制、Delete删除、F2重命名是最常用的编辑操作
  • 顶点吸附(V键)和网格吸附(Ctrl)提高场景搭建精度

📝 从下一篇文章开始,我们将深入学习材质与纹理系统------让游戏中的物体不仅有不同的颜色,还能有逼真的纹理贴图和表面细节。

动手任务:完成本文第七节的"小型城堡"挑战,搭建你自己的场景作品!


关于作者:拥有多年Unity开发经验的游戏开发者,专注Unity系统化教学与最佳实践分享。欢迎在评论区交流讨论!

相关推荐
星空露珠3 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
中国搜索直付通5 小时前
棋牌游戏支付与防沉迷:二级商户如何构建“免疫系统”
游戏
2601_962924765 小时前
遗忘之海手游战术家怎么玩 遗忘之海手游战术家玩法攻略
游戏
雅客李6 小时前
2026年第三季度云手机实测 游戏多开挂机托管三维度数据公开
游戏·智能手机
爱吃程序猿的喵7 小时前
LingBot-Map 复现与原理剖析:基于 Geometric Context Transformer 的流式 3D 重建
人工智能·python·深度学习·计算机视觉·3d·transformer
ellis19708 小时前
C#异常相关关键字:Exceptions,throw,try,catch,finally
unity·c#
_Tenk_8 小时前
自研开源小工具 SwitchDeck:一键切换分辨率/刷新率/音频输出(附 WinForms 高 DPI 踩坑实录)
游戏·分辨率·cs2·看电影·一键切换·音响耳机音频·州瓦go
HH‘HH19 小时前
Unity通过OPC UA工业协议连接工业设备实战指南
unity·游戏引擎