查看: 2921|回复: 10
打印 上一主题 下一主题

[交流] [技术公布]在UI中绑定引擎变量,实现原生效果

[复制链接]

22

主题

317

回帖

174

积分

Lv.4 怪物猎人

UID
373726
小麦
3
金锭
609
下界之星
0

开发者认证勋章

跳转到指定楼层
楼主
发表于 2021-12-17 02:20:04 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式 IP:上海
本帖最后由 sevenstars 于 2021-12-17 02:27 编辑

我们知道,开发者可以在HUD上添加自己的UI,比如各种技能按钮,菜单按钮等。但据我观察,很多开发者的UI并不会在按下F1(即打开“隐藏HUD”)后隐藏。这给玩家的截图带来了不便。然而很遗憾的是,我们不能通过modAPI获取玩家是否打开了“隐藏HUD”。但现在只需在UI加几行json,绑定游戏自带变量,就能实现这个效果。
比如这里有一个按钮控件:
  1. "SetButton@common.button": {
  2.     "anchor_from": "top_left",
  3.     "anchor_to": "top_left",
  4.     //剩下的省略
  5. }
复制代码

要想实现让这个按钮和它的子控件可以按F1就隐藏,可以改成这样:
  1. "SetButton@common.button": {
  2.     "anchor_from": "top_left",
  3.     "anchor_to": "top_left",
  4.     //剩下的省略
  5.     "bindings": [
  6.         {
  7.             "binding_name": "#hud_visible",    //绑定游戏变量hud_visible,这个变量的值取决于“隐藏HUD”是否开启。
  8.             "binding_name_override": "#visible",   //绑定控件变量visible,这时你这个控件的visible就取决于hud_visible这个变量的值了
  9.             "binding_type": "global"   //绑定类型为全局绑定
  10.         }
  11.     ]
  12. }
复制代码

这样写完之后,内部流程就是,玩家开启或关闭HUD显示->hud_visible变化->visible变化->控件显示或隐藏。
当然,我的世界的HUD的透明度也是可以调的,如果想让mod的UI透明度跟随HUD透明度,可以再绑定两个变量:
  1. "SetButton@common.button": {
  2.     "anchor_from": "top_left",
  3.     "anchor_to": "top_left",
  4.     //剩下的省略
  5.     "bindings": [
  6.         {
  7.             "binding_name": "#hud_visible",
  8.             "binding_name_override": "#visible",
  9.             "binding_type": "global"
  10.         },
  11.         {
  12.              "binding_name": "#hud_alpha",
  13.              "binding_name_override": "#alpha",
  14.              "binding_type": "global"
  15.         },
  16.         {
  17.              "binding_name": "#hud_propagate_alpha",
  18.              "binding_name_override": "#propagateAlpha",
  19.              "binding_type": "global"
  20.         }
  21.     ]
  22. }
复制代码

这样,此按钮控件的alpha和propagateAlpha就和游戏的hud_alpha以及hud_propagate_alpha绑定了。这样就实现了某个控件与它的子控件的透明度跟随HUD透明度。
除了这三个之外,还有很多游戏变量可以绑定,我这里列举一下:
paper_doll_visible:是否开启了显示纸娃娃
is_not_creative_mode:是否不在创造模式
is_creative_mode:是否在创造模式
exp_progress:玩家的经验值进度(推荐绑定到控件的clip_ratio上)
level_number:玩家的经验等级(请绑定到控件的text上)
level_number_visible:玩家的经验等级是否显示
is_armor_visible:玩家是否穿着盔甲
player_position_text:玩家的坐标(和打开显示坐标后的值一样,请绑定到控件的text上)
player_position_visible:玩家是否打开显示坐标
is_riding:玩家是否在骑乘
is_not_riding:玩家是否没在骑乘
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部