暗黑破坏神2重制版Mod制作学习之界面文件编写手册(AI)

4 阅读4分钟

Diablo II Resurrected UI编写手册

1. 目录结构

UI布局文件位于 data/global/ui/layouts 目录下,主要分为以下几个部分:

1.1 主目录

  • 包含所有基础UI布局文件
  • hudpanel.jsonmainmenupanel.jsonplayerinventoryoriginallayout.json

1.2 Controller目录

  • 包含控制器相关的UI布局
  • 分为 consolepc 子目录
  • console 目录又包含 switch 子目录

1.3 文件命名规范

  • 基础文件名:功能描述 + 布局类型
  • 高清版本:在文件名后添加 hd 后缀
  • 不同分辨率:如 messagelogpanel_640x480.json

2. JSON文件格式

2.1 基本结构

{
    "type": "组件类型",
    "name": "组件名称",
    "fields": {
        // 组件属性
    },
    "children": [
        // 子组件
    ]
}

2.2 核心属性

  • type: 组件类型,如 PanelWidgetButtonWidget
  • name: 组件名称,用于标识和引用
  • fields: 组件属性配置
  • children: 子组件列表

3. 组件类型

3.1 面板类

  • Panel: 基础面板组件
  • SDHeadsUpPanel: 标准清晰度抬头面板
  • HUDPanelHD: 高清版本抬头面板
  • PlayerInventoryPanel: 玩家 inventory面板

3.2 基础组件

  • Widget: 基础容器组件
  • ClickCatcherWidget: 点击捕获组件,用于处理点击事件

3.3 图像组件

  • ImageWidget: 静态图像组件
  • AnimatedImageWidget: 动画图像组件
  • GridImageWidget: 网格图像组件

3.4 文本组件

  • TextBoxWidget: 文本显示组件

3.5 按钮组件

  • ButtonWidget: 基础按钮组件
  • SkillSelectButtonWidget: 技能选择按钮
  • MiniMenuButtonWidget: 迷你菜单按钮
  • LevelUpButtonWidget: 升级按钮
  • RunButtonWidget: 跑步按钮

3.6 特殊功能组件

  • AttributeBallWidget: 属性球(生命值、法力值)
  • ExpBarWidget: 经验条
  • StaminaBarWidget: 耐力条
  • BeltWidget: 腰带组件
  • InventoryGridWidget: 物品栏网格
  • InventorySlotWidget: 物品栏槽位

4. 布局配置

4.1 位置和大小

  • rect: 组件位置和大小
    • x: 水平位置
    • y: 垂直位置
    • width: 宽度
    • height: 高度
    • scale: 缩放比例

4.2 锚点

  • anchor: 组件锚点,使用相对坐标
    • x: 水平锚点(0-1)
    • y: 垂直锚点(0-1)

4.3 优先级

  • priority: 组件显示优先级,数值越大显示越靠前

4.4 背景和资源

  • filename: 资源文件路径
  • frame: 当前帧
  • frames: 总帧数
  • rows: 行数(用于网格图像)

4.5 样式

  • style: 文本和UI样式
    • fontColor: 字体颜色
    • pointSize: 字体大小
    • alignment: 对齐方式
    • spacing: 间距
    • dropShadow: 阴影效果

5. 高清版本差异

5.1 文件命名

  • 高清版本文件通常带有 hd 后缀

5.2 尺寸和位置

  • 高清版本使用更大的尺寸和位置值
  • 例如:标准版本 rect 可能为 {"x": 29, "y": 11},高清版本可能为 {"x": 294, "y": 65, "width": 348, "height": 350}

5.3 资源路径

  • 高清版本使用更复杂的资源路径
  • 例如:PANEL/HUD_02/HealthManaAnimation/HealthIdle/4k/globe_health_man_idle

5.4 视觉效果

  • 高清版本增加了更多动画和视觉效果
  • 使用 AnimatedImageWidget 实现动画效果
  • 增加了颜色变换和高级着色功能

6. 最佳实践

6.1 文件组织

  • 按照功能模块组织文件
  • 使用清晰的命名规范
  • 分离标准清晰度和高清版本

6.2 组件使用

  • 根据功能选择合适的组件类型
  • 合理使用子组件结构
  • 保持组件层次清晰

6.3 布局定位

  • 使用相对和绝对定位相结合
  • 考虑不同分辨率的适配
  • 使用锚点实现灵活布局

6.4 资源引用

  • 使用统一的资源路径格式
  • 确保资源文件存在且路径正确
  • 为高清版本提供适当的资源

6.5 性能优化

  • 避免过度使用复杂组件
  • 合理设置动画帧率
  • 优化图像资源大小

7. 示例

7.1 基础面板

{
    "type": "Panel",
    "name": "ExamplePanel",
    "fields": {
        "priority": 50,
        "anchor": { "x": 0.5, "y": 0.5 },
        "rect": { "x": -150, "y": -100, "width": 300, "height": 200 }
    },
    "children": [
        {
            "type": "ButtonWidget",
            "name": "CloseButton",
            "fields": {
                "rect": { "x": 250, "y": 10 },
                "filename": "PANEL/buysellbtn",
                "normalFrame": 10,
                "pressedFrame": 11,
                "tooltipString": "@strClose",
                "onClickMessage": "ExamplePanel:Close"
            }
        }
    ]
}

7.2 技能按钮

{
    "type": "SkillSelectButtonWidget",
    "name": "SkillButton",
    "fields": {
        "rect": { "x": 100, "y": 100 },
        "side": "left",
        "skillIconFilenames": "$SkillIconFilenames"
    },
    "children": [
        {
            "type": "TextBoxWidget",
            "name": "HotkeyText",
            "fields": {
                "rect": "$SkillHotkeyTextRect",
                "style": "$SkillHotkeyTextStyle"
            }
        }
    ]
}

8. 常见问题

8.1 布局定位问题

  • 问题:组件位置不正确
  • 解决:检查 rect 和 anchor 属性,确保坐标计算正确

8.2 资源加载问题

  • 问题:图像不显示
  • 解决:检查 filename 路径是否正确,确保资源文件存在

8.3 高清版本适配

  • 问题:高清版本布局错乱
  • 解决:确保高清版本使用正确的尺寸和资源路径

8.4 动画效果问题

  • 问题:动画不播放
  • 解决:检查 AnimatedImageWidget 的配置,确保 filename 和 fps 设置正确

9. 总结

Diablo II Resurrected 的UI系统使用JSON文件定义布局,通过组件化的方式构建复杂的用户界面。了解其结构和规则有助于创建和修改UI布局,实现自定义的游戏界面效果。

在编写UI布局时,应注意:

  • 遵循文件命名和组织规范
  • 使用合适的组件类型
  • 合理配置布局属性
  • 为高清版本提供适当的资源和配置
  • 优化性能和视觉效果

通过本手册的指导,您应该能够理解和创建符合Diablo II Resurrected标准的UI布局文件。