跳转到内容

5. 你的第一个世界

约 30 分钟 难度:新手 动手章

这一章的目标很明确:把一个能站进去的世界搭出来。

场景会很空:一块地板、一个出生点、默认蓝天和一盏太阳灯。但在 VRChat 客户端里看到它、用键盘走在上面之后,Unity 里那些几何方块就成了一个真的可以走进去的空间。

一个最基础的世界要回答三件事

Section titled “一个最基础的世界要回答三件事”

VRChat 把玩家放进世界之前,必须先得到这三件事的答案:

  1. 玩家可以站在哪?需要一块带物理碰撞的地面,不然进来就掉。
  2. 玩家进来时落在哪个位置、面朝哪边?需要一个明确的出生点。
  3. 这个 Unity 场景到底是不是 VRChat 世界?需要一个叫 VRC Scene Descriptor 的描述组件。

接下来的四步分别解决这三件事。

打开上一章建好的 MyFirstWorld 项目。

菜单栏 FileNew Scene,弹出的面板里选 Basic。然后按 Ctrl+S,把场景命名为 MyFirstWorld,保存到 Assets/Scenes/ 目录下。如果这个目录不存在,右键新建一个。

第二步:解决踩地(创建地板)

Section titled “第二步:解决踩地(创建地板)”

左侧 Hierarchy 面板的空白处右键,3D ObjectCube。把新物体改名为 Floor

选中 Floor,右侧 Inspector 最上方找到 Transform,把参数改成:

  • Position0, 0, 0
  • Rotation0, 0, 0
  • Scale10, 0.2, 10

原本的小方块变成一块 10 米见方、20 厘米厚的扁平地板。

为什么用 Cube 不用 Plane?两层原因:

  • 渲染层面:Unity 内置 Plane 是一张由两个三角形组成的薄片,法线朝上;标准着色器默认开启背面剔除(backface culling),从底面看时整张地板会直接消失。Cube 是封闭的六面体,从任何角度都不穿帮。
  • 碰撞层面:Plane 默认挂的是 Mesh Collider(薄片网格碰撞),它本身没有厚度,玩家从边缘横向走过来、或者高速跳跃时,物理引擎容易出现「擦边漏检」,人直接掉穿地板。Cube 默认挂的是 Box Collider(盒子碰撞体),有完整体积,踩上去稳得多。

简而言之:Plane 是给「装饰用平面」准备的,比如墙上一张海报;做能踩的地板,永远首选 Cube 拍扁。

需要告诉 VRChat:玩家进场景时,应该出现在哪儿、面朝哪边。

Hierarchy 空白处右键,Create Empty,新物体改名 Spawn

Inspector 里把 Spawn 的 Position 设为 0, 0.2, 0,Rotation 保持默认 0, 0, 0

地板厚度 0.2 米、中心在原点,上表面在 Y = 0.1。Y = 0 会让出生点落在地板内部;Y 比 0.1 略高一点(例如 0.2)即可贴地站立。

Hierarchy 空白处右键,Create Empty,命名 WorldDescriptor

选中它,Inspector 最下面点 Add Component,搜索 VRC Scene Descriptor,从结果里点上它。

加好后,在它的属性里找到 Spawns 字段,这是一个用来登记出生点的数组。把 Hierarchy 里的 Spawn 物体直接拖进 Spawns 下方的 Element 0 空槽。这样 VRChat 就知道该把玩家送到哪个位置了。

顶部菜单栏 VRChat SDKShow Control Panel,打开 SDK 控制面板。如果还没登录,先登一下账号。

Builder 标签页下面,找到 Build & Test 按钮,点。

Unity 会在后台打包并构建本地测试数据,一两分钟。打包完成后会自动唤起本机的 VRChat 客户端。

画面加载好后,眼前是一个很空的世界:脚下灰白地板,四周默认蓝天,一盏太阳灯照着。

W A S D 走两步,晃一下鼠标看看天。

这就是这一章要做出来的第一个世界。

简陋,但它是从零搭起来的空间。回 Unity 改参数,再 Build & Test,新改动立刻就能进去看。「改 → 构建 → 进去看」这个循环,是 VRChat 世界开发的日常节奏。

刚才一路下来,骨架其实很简单:

  • 一个场景文件 MyFirstWorld.unity,存所有空间数据。
  • 一块带物理碰撞的地板 Floor,解决玩家在哪站。
  • 一个空物体 Spawn,标记玩家进来的位置和朝向。
  • 一个挂了 VRC Scene DescriptorWorldDescriptor,告诉 SDK 这是 VRChat 世界。

后面世界做得再大、交互再复杂,最底下的骨架永远是这四样。

回 Unity 改几样参数,重新 Build & Test 一次,把 Unity 和 VRChat 之间这条链条的直觉建立起来:

  • Floor 的 Scale 改成 20, 0.2, 20,进去看看是不是变宽了。
  • Spawn 的 Rotation Y 改成 180,进去看看出生方向是不是反了。
  • 复制(Ctrl+D)几个 Cube,缩小后错落摆在地板周围当凳子,进去试试能不能跳上去。

「改一个参数 → 进去看效果」这个回路,比读十遍文档管用。下一章往里看一层:Unity 凭什么能让一块 Cube 当地板用。