18726317637 发表于 2022-1-11 05:52:00

222222222222

本帖最后由 18726317637 于 2022-11-2 14:10 编辑

2222222222222222222

Nostalie 发表于 2022-1-12 11:34:27

本帖最后由 Nostalie 于 2022-1-12 11:52 编辑

观战ui能重载的话这个做起来不麻烦吧

18726317637 发表于 2022-1-12 18:52:44

Nostalie 发表于 2022-1-12 11:34
观战ui能重载的话这个做起来不麻烦吧

UI重载只是重新布局界面而已。
而我做的是原版的观战UI所没有的功能,重载UI没有一点关系

Nostalie 发表于 2022-1-12 21:27:52

本帖最后由 Nostalie 于 2022-1-12 23:20 编辑

你不会以为ui重载就只能改改大小位置吧。
其实ui重载更爽的地方是你能在重载的对象里造新的东西。并且是可以被触发器衔接的。但并不是所有都能重载的,比如菜单。所幸观战ui是可以的。

没必要执着于全部用触发器。
你有没有想过,你观战和看录像可能是同一种模式。
而看录像的时候当然不会正常触发触发器。否则你就改写历史了。。。

总的思想就是内容交给触发器做。但是显示交给ui逻辑(不仅可以继承原有的逻辑写起来简单省事而且观战模式下有效)



18726317637 发表于 2022-1-13 06:33:33

Nostalie 发表于 2022-1-12 21:27
你不会以为ui重载就只能改改大小位置吧。
其实ui重载更爽的地方是你能在重载的对象里造新的东西。并且是可 ...

即使可以用UI重载创建一个新按钮,但是如何设置才能让该按钮被点击时,显示触发器做的对话框呢?UI编辑器可没有这种设置

Nostalie 发表于 2022-1-13 20:32:54

本帖最后由 Nostalie 于 2022-1-13 23:29 编辑

怎么没有这种设置?不会不代表没有吧。这方面教程资料比较少而已但也不是没有UI Editor - SC2Mapster Wiki (fandom.com)
stategroup 里when 或者animation的event都可以来监测其他控件的状态并作出改变
另外不单单是按钮,你要显示的东西也得在ui里先定义好。再用触发器衔接。实时更新内容。
这样做也不麻烦。你触发器只需要管内容更新,无需考虑大小位置层级显示的问题。

如果是用勾选框来显示影藏的用stategroup非常简单。
按钮就复杂一些要记录之前的状态所以用到两个stategroup不过自己DIY还是很容易的。

直接上ui代码算了。虽然自己折腾理解会更好,这个ui布局能在观战ui多加一个label和按钮。按钮能显示影藏label。label只是起个演示你换成frame。在里面装更多东西都可以。

    <Frame type="LeaderPanel" name="GameUI/UIContainer/FullscreenUpperContainer/LeaderPanel" file="GameUI">
      <Frame type="Label" name="ObLabel" template="TriggerDialogFrame/TriggerControlLabelTemplate">
            <Style val="@@@InfoPaneHeroWeapon"/>
            <Text val="内容触发器衔接后可实时修改"/>
            <Anchor side="Top" relative="$parent" pos="Mid" offset="0"/>
            <Anchor side="Left" relative="$parent" pos="Mid" offset="0"/>
            <StateGroup name="VisibilityToggle">
                <DefaultState val="Visible"/>
                <State name="Visible">
                  <Action type="SetProperty" frame="$this" Visible="True"/>
                </State>
                <State name="NotVisible">
                  <Action type="SetProperty" frame="$this" Visible="False"/>
                </State>
            </StateGroup>
            <StateGroup name="Pushed">
                <State name="Show">
                  <When type="Property" frame="$parent/ObButton" Pushed="True"/>
                  <When type="StateGroup" frame="$this"   VisibilityToggle="NotVisible"/>
                     <Action type="SetState" frame="$this" group="VisibilityToggle" state="Visible"on="Exit"/>
                </State>
                <State name="Hide">
                  <When type="Property" frame="$parent/ObButton" Pushed="True"/>
                  <When type="StateGroup" frame="$this"VisibilityToggle="Visible"/>
                  <Action type="SetState" frame="$this" group="VisibilityToggle" state="NotVisible" on="Exit"/>
                </State>
            </StateGroup>
      </Frame>
      <Frame type="Button" name="ObButton" template="TriggerDialogFrame/TriggerControlButtonTemplate">
            <Style val="@@@InfoPaneHeroAttribute"/>
            <Anchor side="Bottom" relative="$parent/ObLabel" pos="min" offset="4"/>
            <Anchor side="Left" relative="$parent/ObLabel" pos="Mid" offset="0"/>
            <Width val="70"/>
            <Height val="30"/>
            <Text val="按钮"/>
      </Frame>
    </Frame>

头目的UI教程教过怎么hookup,对于重载时新定义的控件注意template指定TriggerDialogFrame里的。其他和已有控件的hookup是一样的。
之后就可以在触发器里操控这些定义在ui布局里的控件。你想放啥内容就爱放啥。


18726317637 发表于 2022-1-14 06:40:58

Nostalie 发表于 2022-1-13 20:32
怎么没有这种设置?不会不代表没有吧。这方面教程资料比较少而已但也不是没有UI Editor - SC2Mapster Wiki...

感谢如此费心费力解答。试了一下果然有效,你的回答给我打开了新世界的大门~!
页: [1]
查看完整版本: 222222222222