跳转至

4. 丰富您的线路

在上一章节中,我们创建了一条可以运行的基础线路。本章将在此基础上,学习使用更多指令来丰富线路细节,提升其视觉效果和可玩性。

我们将对线路进行以下改进:

  1. 更新车站信息:修改站名、时刻表和停车参数。
  2. 添加天空背景:为场景添加天空贴图。
  3. 铺设地面:为轨道添加地面,解决悬空问题。
  4. 建设站台:为车站添加站台模型。
  5. 规范文件结构:重命名并整理线路文件。

跟随实践

为了达到最佳学习效果,请在阅读本教程的同时,打开您的线路文件,跟随步骤同步进行修改。


1. 更新车站信息

我们为这条虚构的线路设定更具体的信息:昌北轨道交通开发区轻轨线

  • 第一站: 海岸大道 (Haian Avenue)
    • 轨道位置: 1000m
    • 到站/发车: 8:00:00 / 8:01:00
    • 最小停车时间: 30s
    • 开门方向: 右侧
  • 第二站: 海滨汽车站 (Haibin Bus Station)
    • 轨道位置: 1800m
    • 到站/发车: 8:02:50 / 8:03:30
    • 最小停车时间: 20s
    • 开门方向: 右侧
  • 停车精度: 允许前后误差 2 米。

为何从 1000 米开始?

将线路起点设置在 1000 米(或其他非零位置)是一个好习惯。这为将来向后延伸线路(例如,添加入库线)预留了空间。

根据以上信息,更新 With Track 部分的代码:

With Track
1000
    .Sta 海岸大道;8.00;8.01;;R;;;;30
1080
    .Stop -1;2;2
1800
    .Sta 海滨汽车站;8.02.50;8.03.30;;R;;;;20
1880
    .Stop -1;2;2
  • 站距: 1800m - 1000m = 800m。
  • 停车点: .Stop 指令的位置 (1080, 1880) 是基于车站位置和列车长度(80m)计算的。参数 -1 将停车标志牌置于轨道左侧。
  • 时间格式: 注意 openBVE 中,小时和分钟使用小数点分隔 (8.00),而分钟和秒之间没有分隔符 (8.02.50)。

修改完成后,启动游戏并按 Ctrl+T 查看时刻表,您会看到新的站名和时间已经生效。

时刻表更新效果


2. 添加天空背景

空旷的黑色背景显得过于单调。我们可以通过 Texture.Background 指令为其添加天空贴图。

首先,在 With Texture 块中加载背景图片:

With Texture
    .Background(0).Load zbx1425/tutorial/background/plain1.png

这段代码将 plain1.png 图片加载为 0 号背景。由于线路默认从头开始使用 0 号背景,我们无需在 Track 部分额外指定。

关于路径

所有资源文件(图片、模型等)都应放置在 LegacyContent/Railway/Object/ 目录下。加载时,必须使用相对于 Object 目录的相对路径,并使用正斜杠 / 作为路径分隔符。

完成后,您将看到场景不再是漆黑一片。

添加背景后效果


3. 铺设地面

为了让轨道不再悬空,我们需要为其添加地面。这与添加背景的逻辑类似,使用 Structure.Ground 加载模型,然后通过 Track.Height 调整其垂直位置。

  1. With Structure 块中加载地面模型:

    With Structure
        .Rail(0).Load zbx1425/tutorial/rail/gndblst0.csv
        .Ground(0).Load zbx1425/tutorial/ground/mcgrass.csv
    
  2. With Track 块的起始位置(0 米处)设置地面高度:

    With Track
    0
        .Height 0.3
    1000
        .Sta ...
    

Z-Fighting (深度冲突)

如果不使用 .Height 调整,地面将默认生成在 0 米高度,与轨道表面重合,导致渲染时出现闪烁(即 Z-Fighting)。将地面高度设置为 -0.3 米(示例轨道模型的高度)可以解决此问题。

错误的地面高度导致渲染问题

正确设置后,轨道将稳固地铺设在地面上。

正确设置地面后效果


4. 建设站台

站台本质上也是一个模型,我们使用 FreeObj (Free Object) 指令来放置它。

  1. With Structure 中加载站台模型:

    With Structure
        ; ... 其他模型
        .FreeObj(0).Load zbx1425/tutorial/platform/ground84.csv
    
  2. With Track 的相应位置放置站台:

    With Track
    ; ...
    1040
        .FreeObj 0
    ; ...
    1840
        .FreeObj 0
    

.FreeObj 指令可以将任意加载过的模型放置在轨道旁的指定位置。其参数可以控制模型的水平/垂直偏移和旋转角度。

模型坐标原点

.FreeObj 默认将模型的坐标系原点放置在轨道中心。教程资源中提供的站台模型已经过预处理,其坐标原点被设置在了便于对齐的位置,因此我们无需额外调整偏移量。

站台模型对齐示意图

现在,您的车站应该已经拥有了站台。

添加站台后效果


5. 规范文件结构

为了便于管理,建议将同一线路的所有文件(包括线路文件、模型、贴图等)都存放在一个专属的文件夹内。

例如,在 LegacyContent/Railway/Route/ 中创建一个名为 CRT Light Rail Line 的文件夹,并将线路文件移入其中,重命名为能反映其内容的名称,如 SeasideAvenue-HaibinBusStation.csv

文件整理后在游戏中的显示


● 思考

  1. 如何将天空背景更换为黄昏主题的贴图?
  2. 在我们的示例中,轨道、背景和地面都使用了默认的 0 号。如果想显式地指定它们,应该如何编写代码?
  3. 如果想将站台从轨道右侧移动到左侧,需要如何修改?
  4. 如果一趟夜班车在某站的停车时间是从 23:59:45 到第二天的 00:02:15,对应的 .Sta 指令应该如何书写?

当您思考完这些问题后,就可以进入下一章节,学习更高级的线路编辑技巧了。