找回密码
 点一下
查看: 1684|回复: 12

关于血条的一些吐血研究。

[复制链接]
发表于 2016-11-24 17:23:26 | 显示全部楼层 |阅读模式
本帖最后由 东方油瓶 于 2016-11-25 22:35 编辑


实际上做了几个版本的血条。最终确定下来一个,自己不是很满意,但是实际效果已经OK的血条。

第一次用的是纯UI 编辑器写出来的血条。
这种血条方便控制,效果好,没有什么瑕疵需要去修补,可是局限性比较大。
首先,有很多的坑爹因素在里面,很多label跟bar的意义不明,一个个去试估计 1 年也试不出来。
功能性基本上也封顶了,除非BLZ更新,目前的功能上限:
·随意位置的随意图片
·随意位置的随意文字
·玩家名字
·单位名字
·血条 and 护盾[双重条]
·蓝条
·独立护盾条
·独立血条
·任意条的颜色,任意条的增幅减少颜色
还有一个叫做dot预期生命的东西,实在没精神去整了,毕竟一个护盾都整了 一个星期左右才会玩,还是问的头目。
自己整,呵呵了,永远整不出来,因为靠猜目前我也就猜对了一次UI的东西。
可以看见,局限性还是很大,主要是这个东西不能自己想干嘛就干嘛,比起对话框来说还是显得挫了很多点。
比如吧,段值这个东西,只能指定数值的段,不能灵活段,比如100小段,1000大段就不行,实际效果也是不尽人意的。
再比如吧,魔法盾紫色,物理盾橙色,全盾白色,这也是不行的,这就很尴尬了。


第2次用的是触发器模板对话框项+UI。
亲测了大图AOS的血条,那个血条用的是创建模板对话框,也是现在用的办法。
能衔接对话框,少量不需要太大功能性的血条可以用这个来整,比如进度条,蓝条,持续时间条,等级条,这些可以用模板直接创建。
然后名字标签,血条,自己撸,也是没太大毛病。


然而就在此时,非常恶心的一个事情出现了,就是渲染优先级的问题。
首先这个东西如果不管,那么2D界面的UI会被这些血条覆盖,看起来跟一坨屎一样。
管呢,是没有问题的,很轻松,毕竟有函数。
但是发现了一个硬伤方面,属于管不动的,就是文本标签的渲染优先级。
默认(合理)的渲染级: 2D》文本标签》血条》游戏世界
然而折腾得快死了发现一个很TM好玩的东西:

WorldPanel 这个框架,如果重载,然后设定 渲染类型为LDR,画面就会直接变成低,也就是玩家设置的那样。
此时玩家无论如何设置,画面永远是LDR,也就是低,很好玩。而且有很多诡异的bug
比如状态条、文本标签、HDR的UI层,会被游戏界面覆盖,水体也会被游戏界面覆盖,可见水体是HDR的渲染类型。
此时如果单位走到水中,血条是看得见的,出去了就看不见了,我简直要笑死,这算什么啊23333

嗯,好玩是好玩,可惜是然并卵的。很多机制都是这样,你发现了,并没有什么用,因为没有可以正式操作的接口。

由此可见,AOS虽然是个大图,可是作者的很多做法仍然是存在瑕疵的。
血条会挡住文本标签这种情况是一种比较影响画面信息的不良美术,一个暴击好端端的被血条挡住了,那个感觉是很狗血的,也是挺智障的。

第3种,触发器衔接单位状态+UI 编辑器
我认为暴雪所有他认为可以提供的功能,大部分都不会提供一个比较狗血的,不能让人玩好的阉割版功能。
所以前两种属于不正确的姿势而已,并不是暴雪的锅,而是我自己的问题。

游戏世界的渲染 与 其他元素的渲染层级,是不能通过渲染优先级来改变的,只能靠渲染类型。然而渲染类型会影响太多画面机制,因此不能使用。
暴雪的意思很简单,这两个层级的渲染,你是不能碰的,2D永远大于3D,爱碰就搞一个鬼图出来,各种幽灵现象。

因此呢,感觉某种程度上,附着对话框到单位附着点这个功能,可以说是半废了。
因为想要创建3D渲染层的对话框,只能用衔接单位状态条,而衔接单位状态条是不需要附着到单位身上的,他会自动附着。

2D渲染层的对话框如果附着,那么意义应该是将其作为3D对话框使用,而他的渲染优先级却又不能跟3D渲染层交互,这不是坑爹么?

还有,触发器衔接单位状态,貌似是不能作为面板来创建对话框项的,会提示一个错误:不能在单位状态条框架上衔接框架。
因此,所有需要用到的元素必须在UI层里面写出来,可以通过隐藏的方式来去掉暂时不用的元素,但是一定要有,这就很烦,因为是伪动态。
不是想删就删,想加就加的。必须加了,然后删靠隐藏完成,加靠不隐藏完成,真是TNND绕啊,爹啊,你就不能耿直点么?[错误]


以上就是这么多了,渲染优先级,一直是一个不亚于UI编辑器的东西。
(LDR>HDR)>(优先大>优先小)>(后创建>先创建) && (父级的渲染>子级的渲染)


其实我想说,写的时候想这么多真的会死的。
发表于 2016-11-25 21:58:57 | 显示全部楼层
自定义状态条我没研究过。但是基于其他UI编辑器尝试,我想说的是:使用UI编辑器编写自定义状态条,是不是允许创建额外的某些东西,比如标签,图片这些。如果可以的话,就能随意定制自定义状态条,单位出生后再衔接它,然后控制它。这样是不是会好。
回复

使用道具 举报

发表于 2016-11-25 22:03:01 | 显示全部楼层
基于你后边所说的无法动态创建,我认为这不是大问题。其实你做一张图,其中状态条大致的形态都是固定的。当然可能有很多种,但对其中一种来讲,它的样式是基本固定的。这样你预先定义若干种样式,为不同的单位使用不同样式,这样可能比定制一个通用样式更方便,也更节约。

点评

但是创建出来的还是有渲染的问题,会挡住文本标签,因此还是得在里面预先写好... 不过这不是什么大问题~  详情 回复 发表于 2016-11-25 22:24
老哥,我错了,昨天太混了,没有测试好,估计是哪里没写对,可以随意创建的~!  详情 回复 发表于 2016-11-25 22:16
回复

使用道具 举报

 楼主| 发表于 2016-11-25 22:16:39 | 显示全部楼层
yxxiaobin 发表于 2016-11-25 22:03
基于你后边所说的无法动态创建,我认为这不是大问题。其实你做一张图,其中状态条大致的形态都是固定的。当 ...

老哥,我错了,昨天太混了,没有测试好,估计是哪里没写对,可以随意创建的~!
回复

使用道具 举报

 楼主| 发表于 2016-11-25 22:24:53 | 显示全部楼层
本帖最后由 东方油瓶 于 2016-11-25 22:31 编辑
yxxiaobin 发表于 2016-11-25 22:03
基于你后边所说的无法动态创建,我认为这不是大问题。其实你做一张图,其中状态条大致的形态都是固定的。当 ...
修改了一下最终结果,可以随意创建,具体如下:
%P8N`194%AHH`9[KK}QO`_3.png 0D(Y[Z8IDL5)I5`{0K`7H76.png $Y%SYO2Q21HQ1]_@7RV(3Q9.png
已经不会挡住了,比较重要的就是创建出来的必须HDR,模板状态条框架也必须要设置为HDR。收工收工,完美解决,~

点评

这个挺好的,感谢分享。  发表于 2016-11-26 19:20
回复

使用道具 举报

发表于 2016-12-10 22:13:09 来自手机 | 显示全部楼层
纯UI有没有办法做到在单位头上显示等级+名字。比如lv5.雷诺。这样的方式
回复

使用道具 举报

发表于 2016-12-10 22:14:13 来自手机 | 显示全部楼层
说错了,是在UI编写的血条上方

点评

levelLabel,显示单位等级整数 unitnamelabel,显示单位的名字。 两个label可以组合,但是效果并不好,还是自己写比较好,效果不比纯UI差。  详情 回复 发表于 2016-12-11 20:28
回复

使用道具 举报

 楼主| 发表于 2016-12-11 20:28:44 | 显示全部楼层
2104075556 发表于 2016-12-10 22:14
说错了,是在UI编写的血条上方

levelLabel,显示单位等级整数
unitnamelabel,显示单位的名字。

两个label可以组合,但是效果并不好,还是自己写比较好,效果不比纯UI差。

点评

level label试过了没用,捣鼓了好久都是GG  详情 回复 发表于 2016-12-23 02:09
回复

使用道具 举报

发表于 2016-12-23 02:09:09 来自手机 | 显示全部楼层
东方油瓶 发表于 2016-12-11 20:28
levelLabel,显示单位等级整数
unitnamelabel,显示单位的名字。


level label试过了没用,捣鼓了好久都是GG
回复

使用道具 举报

 楼主| 发表于 2016-12-23 23:59:28 | 显示全部楼层
2104075556 发表于 2016-12-23 02:09
level label试过了没用,捣鼓了好久都是GG

    <Frame type="UnitStatusLevel" name="TemplateLevelImage">
        <Frame type="Label" name="Label">
            <Height val="30"/>
            <Width val="30"/>
            <Anchor side="Top" relative="$parent" pos="Min" offset="0"/>
            <Anchor side="Left" relative="$parent" pos="Min" offset="0"/>
            <Anchor side="Bottom" relative="$parent" pos="Max" offset="0"/>
            <Anchor side="Right" relative="$parent" pos="Max" offset="0"/>
            <Style val="HotS_UnitStatusLevelLabel"/>
            <RenderType val="HDR"/>
            <RenderPriority val="600"/>
        </Frame>

        <Frame type="Image" name="BackgroundImage">
            <Anchor relative="$parent/Label"/>
            <Texture val="Assets\Textures\ui_multiplayerload_avatarborder_levelbg.dds"/>
            <RenderType val="HDR"/>
        </Frame>
    </Frame>

点评

嗯,多谢你了,我后来找到了,是一个专门的框架套一个label的形式。  详情 回复 发表于 2016-12-24 15:00
回复

使用道具 举报

发表于 2016-12-24 15:00:29 来自手机 | 显示全部楼层
东方油瓶 发表于 2016-12-23 23:59
...

嗯,多谢你了,我后来找到了,是一个专门的框架套一个label的形式。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-23 17:53 , Processed in 0.063810 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表