# 替换或修改 props 中的灯光 本文以 *Enlisted* 项目为例,介绍如何替换或修改 props 中的光源。但是,一般过程适用于任何基于 *daNetGame* 的项目。 ## 第 1 阶段:设置 daEditor 1. **打开 [daEditor](../../dagor-tools/daeditor/daeditor/daeditor.md)**: 浏览到目录 `://enlisted/develop` ,然后运行 `daEditor.cmd`. ![](./_images/replacing_or_modifying_lights_01.jpg) 2. **打开项目**: 从菜单中选择 **Open Project**。 ![](./_images/replacing_or_modifying_lights_02.jpg) 3. **加载地图**: 打开*battle_of_berlin*地图。 ![](./_images/replacing_or_modifying_lights_03.jpg) 4. **隐藏不必要的视觉元素**: 按 `P` 打开 **Properties** 窗口。在**Navigation meshes**部分中,取消选中不必要的选项,如下所示。 ![](./_images/replacing_or_modifying_lights_04.jpg) 5. **禁用样条线**:红点表示样条线。要隐藏它们,请单击工具栏上的黑色叉号。 ![](./_images/replacing_or_modifying_lights_05.jpg) 6. **隐藏其他元素**:如果需要隐藏任何其他内容,请按 `F11` 并取消选中弹出窗口中的相关框。 ![](./_images/replacing_or_modifying_lights_06.jpg) 7. **导航到 Prop**:使用 *freeCamera* 模式飞到感兴趣的 prop,并使用`Spacebar`切换。使用 `WASD` 和`LMB`移动。 8. **选择目标Composite**:当您到达灯具时,选择Composite(在本例中为像 *reichchancellery* 这样的建筑物)并按`P`打开 **Object Properties**。 9. **识别所选资产**:请注意显示资产名称(`reichchancellery_cmp`)的高亮按钮,该按钮比`Name`字段更可靠,因为它们可能不同。 ![](./_images/replacing_or_modifying_lights_07.jpg) 10. **将合成分解为组件**:在 **Landscape** 菜单中,选择 **Split components into separate objects** 以分解合成。重复此作,直到您可以接触到灯具。 ![](./_images/replacing_or_modifying_lights_08.jpg) 11. **选择灯具**:启用 *object selection mode*(红色面图标)并选择灯具。灯具的名称将出现在提到的按钮上。 ![](./_images/replacing_or_modifying_lights_09.jpg) ## 第 2 阶段:Asset Viewer 和 Light 预设识别 1. **打开 [Asset Viewer](../../dagor-tools/asset-viewer/asset-viewer/asset_viewer.md)**:从与之前相同的目录运行`daViewer.cmd`。复制资源名称并使用它来搜索资源库。 2. **选择复合**:资产由三个部分组成: - Geometry - Composite (geometry + collision) - Collision 选择复合,右键单击它,然后选择**Reveal in Explorer**。 ![](./_images/replacing_or_modifying_lights_10.jpg) 3. **找到`.blk`文件**:在文件目录中,右键单击`.blk`文件,然后使用文本编辑器或类似*FAR Commander*的工具打开它。 ![](./_images/replacing_or_modifying_lights_11.jpg) 4. **查找光照预设**:在`.blk`文件中,找到灯具引用的光照预设。复制其名称。 ![](./_images/replacing_or_modifying_lights_12.jpg) 5. **搜索预设**:使用 *FAR Commander*(或首选方法)在项目目录 `/enlisted/prog`中搜索预设。 使用`Alt+F1`选择正确的驱动器,使用`Alt+F7`开始搜索。 第一行指定文件掩码,而第二行用于您要搜索的内容的名称。在第二行中输入名称,然后按 `Enter`。 ![](./_images/replacing_or_modifying_lights_13.jpg) 6. **打开预设文件**:预设将在`lights.blk`文件中找到。 按 `F4` 打开它并查看所有光源模板。 ![](./_images/replacing_or_modifying_lights_14.jpg) ![](./_images/replacing_or_modifying_lights_15.jpg) 7. **搜索预设名称**:使用`F7` 搜索特定的光照预设(例如,`light_chandelier_big`)并导航到预设。 ![](./_images/replacing_or_modifying_lights_16.jpg) ## 第 3 阶段:修改和创建 Light 模板 1. **查找父模板**:预设中的`extends`参数引用另一个预设(例如,`omni_light`)。找到父预设。 ![](./_images/replacing_or_modifying_lights_17.jpg) 2. **描摹父预设**:如有必要,将模板的层次结构描摹到顶级光照预设(例如, `local_omni_light`)。 ![](./_images/replacing_or_modifying_lights_18.jpg) 3. **创建新的光源模板**:根据父模板,创建一个新模板。这将需要一个具有唯一名称的新 `.gameObj` 文件,新的 Light 模板将引用该文件。 4. **复制并重命名旧游戏对象**:在旧`.gameObj`文件所在的目录中,复制它并根据需要重命名它。打开相应的`.blk`文件并调整引用。 ![](./_images/replacing_or_modifying_lights_19.jpg) 5. **验证资产**:在 *Asset Viewer* 中搜索重命名的资产,右键单击它,然后在文件结构中找到它的位置。 ![](./_images/replacing_or_modifying_lights_20.jpg) ![](./_images/replacing_or_modifying_lights_21.jpg) 6. **重命名游戏对象**:遵循 [命名约定](../../dagor-home/documentation/naming_conventions.md) 文章。 ![](./_images/replacing_or_modifying_lights_22.jpg) ## 第 4 阶段:测试和导出 1. **在 daEditor 中打开测试地图**:在 *daEditor* 加载过程中选择 **Open Project** 打开测试地图。 ![](./_images/replacing_or_modifying_lights_23.jpg) 编译完成后,daEditor 将提示您打开一张地图。 要继续,请导航到`levels/dev/asset_test_level`并打开测试级别的`.blk` 文件。 ![](./_images/replacing_or_modifying_lights_24.jpg) 2. **清理场景**:如前所述隐藏不必要的元素,然后按`Ctrl+A`和`Delete`删除任何不需要的对象。 3. **创建并放置新实体**:单击工具栏上的白色人脸图标以创建实体。在搜索字段中搜索新的 `gameObj` 并将其拖动到场景中。 ![](./_images/replacing_or_modifying_lights_25.jpg) 4. **调整枢轴点**:默认情况下,实体的枢轴点将设置为世界原点 (`0, 0, 0`),因为 **Place on collision** 切换器设置为 **Place pivot**。打开 **Properties** 窗口(`P`) 并将其设置为 **-no-**。 ![](./_images/replacing_or_modifying_lights_26.jpg) 5. **放置吊灯资产**:复制吊灯的资产名称,在 *daEditor* 中搜索它,将其拖动到场景中,并通过在坐标线中输入相同的数字来对齐其碰撞设置。 ![](./_images/replacing_or_modifying_lights_27.jpg) ```{note} 游戏对象沿其轴的方向目前尚不清楚,只能通过实验来确定。 ``` 6. **为灯泡添加实体**:为将来的灯泡添加两个实体,并在按住`Shift`的同时拖动来复制它们。 ![](./_images/replacing_or_modifying_lights_28.jpg) 7. **在 daEditor 中更新复合**:您可以通过 **Property** 窗口更改与实体关联的复合。选择资产,单击资产名称,然后选择相应的实体 (例如 `light_***_big`)。 ![](./_images/replacing_or_modifying_lights_29.jpg) ![](./_images/replacing_or_modifying_lights_30.jpg) 8. **导出合成**:现在,您需要组合一个新的合成对象。 您选择的第一个对象将用作根节点,复合的枢轴将从该节点继承。首先选择枝形吊灯(其几何图形),然后按住 `Ctrl` 并拖动以选择其余元素。 然后,点击 **Landscape** 并选择 **Export as composite**。 ![](./_images/replacing_or_modifying_lights_31.jpg) 9. **保存合成**:在资源库中找到正确的目录,在名称后附加`_cmp`,然后保存。 ![](./_images/replacing_or_modifying_lights_32.jpg) 10. **在 Asset Viewer 中验证复合**:在 *Asset Viewer* 中搜索复合,并确保一切看起来正确。 ![](./_images/replacing_or_modifying_lights_33.jpg) ## 最后步骤:导出和测试 1. **在 daEditor 中加载位置**:打开 *daEditor*,加载 *battle_of_berlin* 关卡,然后取消选中 **Navigation meshes** 中的所有内容,以便更快地导出。 ![](./_images/replacing_or_modifying_lights_34.jpg) ![](./_images/replacing_or_modifying_lights_35.jpg) 2. **导出到游戏**:选择“Project > Export to game (PC format)”,保持设置不变,并确认。 ![](./_images/replacing_or_modifying_lights_36.jpg) ![](./_images/replacing_or_modifying_lights_37.jpg) 场景将被导出,更改将被写入二进制文件。 ```{important} 如果要添加新的 prop 而不是修改现有的 prop,则需要重新构建。 ``` 在导出构建时,您可以将光照预设更新为所需的光照预设。为此,请转到`prog`目录并找到 `light.blk`文件。 ![](./_images/replacing_or_modifying_lights_38.jpg) ![](./_images/replacing_or_modifying_lights_39.jpg) 3. **替换光预设**:在`light.blk`文件中,找到要替换的相应聚光灯预设并复制它。 ![](./_images/replacing_or_modifying_lights_40.jpg) 接下来,将活动模板替换为复制的预设。 ![](./_images/replacing_or_modifying_lights_41.jpg) 修改模板参数后,保存更改并关闭文件: `F2` – 保存更改, `F4` – 推出。 4. **启动游戏**:导航到`/enlisted/game` 目录,然后通过`z_enlisted_launcher_prog`启动游戏。 ![](./_images/replacing_or_modifying_lights_42.jpg) 在 **Scene** 部分,选择 *berlin* 地图,在 **Vroms** 中选择 `source` ,然后按 **Play** 按钮。 (或者,您可以在控制台中输入命令`app/timeSpeed 0`来冻结游戏中的时间)。 ![](./_images/replacing_or_modifying_lights_43.jpg) 5. **调整光照方向**:进入游戏后,切换到 **free camera** 模式或按`F12`并导航到您正在处理的资源。正如我们所看到的,现在有两个实体对象,确认已应用更改。但是,我们还注意到灯具的方向不正确。 ![](./_images/replacing_or_modifying_lights_44.jpg) 要解决这个问题,请返回到带有测试地图的 *daEditor*。调整光照实体的方向,重新组合并导出合成。 然后,重新导出地图,重新打开游戏,并再次测试更改。 ![](./_images/replacing_or_modifying_lights_45.jpg) 正确定向光源后,按照[Lights](./lights.md) 一文中的说明继续进行最终照明配置。