找回密码
 点一下
查看: 3854|回复: 14

移动光束武器的实现原理简述

[复制链接]
发表于 2015-12-11 12:53:23 | 显示全部楼层 |阅读模式
本帖最后由 yxxiaobin 于 2015-12-17 19:54 编辑

几年前就有人问过巨像武器的实现原理,当时也曾想写一篇教程出来。但是我组织语言的能力实在很差,写出来发现,如果抛开已有的知识,只是从文字上去理解,我自己都不知道自己在说些什么,所以反复写了两次,最后都删掉了。要不发出来,可能会有人误以为我的语文是和体育老师学的(尽管我语文是和数学老师学的)。最近又有人提出这个问题,我觉得几年来不断的读书让自己的写作能力稍微提高了一些,于是又尝试些了这篇教程,虽然最后自己看了两遍还是不知所云,但是勉强发了吧,不足之处,还请大家多多指正。

言归正传。

作为武器来讲,不同的模式,学习难度也是不同的。我个人认为,像机枪兵一样的即时单体目标武器是最简单的,像坦克一样的即时范围武器排第二,如果范围伤害是靠搜索效果完成,则比靠溅射完成更复杂一点,第三则是像导弹塔一样的投射武器,第四就是光束武器了。作为光束武器,难度也不是一样的,像执法者这样的就相对简单些,如果是凯瑞甘那种闪电链、虚空辉光舰一样的持续伤害则稍难,巨像这样的移动光束武器恐怕是最复杂的一种了。
当然,难者不会,会者不难。只要理清移动光束武器的内在联系,制作一个这样的武器也不是特别费事。下面以巨像的热能射线枪为例做下介绍。
热能射线枪的武器部分没什么特殊,只是需要注意,这是一个引导武器。武器显示效果是最终的伤害效果,直接调用效果是一个名为Thermal Lances(set)的集合效果,里边集合了3个效果,分别是左射线(Thermal Lances (Create Persistent Backwards)),右射线(Thermal Lances (Create Persistent Forwards))和攻击友军伤害(Thermal Lances Freindly CP)。
攻击友军伤害:因为巨像的武器是不会对友军误伤的,正常的效果树下不能给友军套用伤害效果,所以当强制攻击友军时不会产生伤害。为了消除这一缺陷,特意加了一个持续性效果调用两次伤害效果来伤害强制攻击的友军单位。
左射线和右射线:如果直接根据名称翻译就是“热能射线枪 创建持续性倒退”和“热能射线枪 创建持续性前进”。这两个子树没有什么本质不同,只就“热能射线枪 创建持续性前进”做一下解释,以下简称右射线。

首先说一下右射线的实际效果部分,即效果行为树。右射线是一个创建持续性效果,作用有两个,一个是决定引导时间,一个是靠持续性偏移序列决定射线移动路径(从右到左)。持续性偏移效果每次都会调用同一个,名为Thermal Lances (Search Backwards),是一个搜索效果,以下称为“右射线搜索效果”。右射线搜索效果搜索符合要求的目标,然后给它们应用一个创建持续性效果(Thermal Lances (Create Delay Persistent)),最终调用伤害效果(Thermal Lances (Damage))。这里不直接调用伤害效果,目的是利用创建持续性效果延迟给予搜索目标伤害,以便和演算体合拍,否则在视觉上就是单位已经受伤,但是射线离它还有一小段距离,这就比较怪异了。根据上边的分析,可以了解右射线的效果行为树的运行原理:右射线根据持续性偏移序列会形成一个从右到左的路径,在这个路径上反复调用右射线搜索效果,然后给予目标伤害,就好像伤害效果沿路径前进一样。这样就实现了右射线的实际效果。左射线只是持续性偏移序列是反的,原理则一样。

然后说一下右射线的演算体部分。一般的武器都有一个动作演算体,光束演算体通常是这个动作演算体创建的。但是热能射线枪的动作演算体只是用于暴露攻击者而已,左右攻击光束是分别响应左右射线的搜索效果创建的。因为搜索效果会反复调用,为了避免重复创建射线,演算体加入了一个条件:cap 1,也就是说同一效果树节点下只允许有一个实例,如果上一个演算体未销毁,则下一个演算体就不能被创建。事实上这个在巨像武器这个特例里,一直都是使用同一个演算体的,但是如果你把位移器设的很快,光束到达目的地后光束就会被摧毁(原理下边会说),这样当再次调用搜索效果时,就会创建一个新的光束演算体,这样感觉射线就会是断断续续的,而不是一条射线扫过去的样子。光束演算体的发射主体使用了一个部位演算体,分别指向了巨像的两个武器附着点,这样光束就能分别从左右武器口发射出来了。如果你改动这个部位演算体,可以让光束从巨像的其他部位发射出来。下边这个是移动武器的重点了:光束演算体的轰击主体使用了一个特殊类型的演算体:位移器(简中版翻译“位置(移动器)”),名字是Colossus Attack Impact Site,并且在光束演算体的开启字段,有一条很关键的消息“移动 目标:ColossusAttackImpactSite”,这样两处设置就会让光束追着指定的位移器移动了。
位置(移动器),这是一类能产生位移的演算体。它的几个关键字段含义如下:
开启,这个和其他演算体含义基本相同。里边只需要注意一个关键消息:“设置移动”。也就是定义移动的目标点。

速度,指位移器的初始速度。
速度最大值,指位移器的最大速度。如果这个值大于初始速度,会根据加速度值逐渐加速到这个值。如果小于初始速度,会根据减速度值逐渐减速到这个值。
加速度和减速度,位移器加速和减速的快慢,值越大,速度变化越快。
在热能射线枪的位移器中有3条消息,一条是让该演算体在搜索效果发生时创建自己,一条把自己的移动目标点设置到搜索效果的位置,最后一条就是位移器到达目标后,会向光束演算体发送消息使之摧毁。但是实际上位移器的移动速度是跟不上搜索效果的前进速度的,所以光束演算体不会被反复摧毁创建(上边提到了,光束演算体里有cap 1条件),只有到最后一个搜索效果发生后,路径结束,光束演算体才会逐渐追上它,然后通知光束自毁,光束自毁了,位移器丧失了支架,也就跟着自毁了。这就是为什么光束虽然是响应搜索效果创建的,却不会和搜索效果一样重复出现。
热能射线枪有轰击演算体,每个光束带有一个,轰击演算体由光束演算体创建,主体也是位移器,所以也会跟随位移器一起移动。这样看上去就像是光束在地上打出的火花一样。
根据上边的分析,可以看出,当第一次调用左/右射线搜索效果时,左/右光束即被创建,同时被创建的还有它们的位移器。当后续每次调用搜索效果,位移器都会重新指定目标点为搜索效果的发生处,然后朝向目标点移动,光束演算体目标绑定在位移器上,会跟着位移器一起移动,当位移器移动到最后一个搜索效果的位置时,所有演算体都会自毁,这时候一次攻击就算结束了。

另外还有一些附加的视听效果,比如点着树,轰击声效等,因为没设么特殊,就不一赘述了。

下边这个是我自定义的一个移动光束武器,会沿s形路线向前行进,因为最后给白球用,为了配合攻击,把白球的演算体也做了一点修改。
演示图地址http://bbs.islga.org/forum.php?m ... 2&page=1#pid2296273


 楼主| 发表于 2015-12-11 13:26:21 | 显示全部楼层
本帖最后由 yxxiaobin 于 2016-1-25 14:50 编辑

除了语言表达能力欠佳,我的排版能力似乎也不怎么样,弄来弄去也不想回事,只好放弃了。
---------------------------------------------------------------------------------------------------------------------------
既然有人关注,那就再用心一点,做一些补充,写几条自己的心得体会。
1.在定义路径的创建持续性效果里边,要注意周期(即“时段时长”字段,一般情况下这个只设定一个值,就相当于周期了)和步长(即路径上相邻两个点之间的距离),这两个值决定搜索效果向前移动的速度(实际上搜索效果是跳跃发生的,而不是无间隔的移动,但是我还是习惯称它为移动),周期越长,步长越短,移动速度就越慢,反之则越快。实际使用时,建议先确定步长,这个值受搜索效果的搜索半径限制:步长值总是稍小于搜索效果的搜索半径的两倍(即步长值总是稍小于搜索直径),否则的话,两个搜索效果之间就不能重叠,可能导致路径上某些单位被漏选。你需要先确定自己需要多大的搜索半径,然后在区间(0,搜索半径*2)范围内确定步长。在确定步长值后,再根据所需的移动速度去计算周期。当然,如果计算出来的周期严重不合理,可以再反向进行调整,最终让周期、步长和搜索半径匹配。

2.要进行一些计算,使路径上任意相邻两个点之间的距离大致相等。如果只是进行直线移动,这个不难,只要让相邻两个坐标之间的x与x的差、y与y的差都相等就好,但是如果是非直曲线的移动,比如抛物线、正弦曲线或者不规则曲线等,那么最好事先进行计算,得到步长基本一致的系列点。假如步长差距很大,会导致:1.搜索效果重叠情况不一致,导致伤害宽度宽窄不一,甚至漏掉某些单位;2.如果不刻意设置不同的时段时长,搜索效果会前进的忽快忽慢,这可能导致演算体无法合拍。当然,在某些特殊需要下,也可能要求有不同的步长值,但是必须考虑到搜索效果叠加的影响,必要时使用不同的搜索效果,并且,根据步长值使用不同的时段时长。

3.伤害效果前最好加一个创建持续性效果,用于延时产生伤害。假如不要这个延时,当搜索效果发生的同时,伤害效果就被应用了,但是在演算体部分,位移器刚刚指定这个搜索效果的位置为目标,还没有开始移动,这就导致看上去单位在射线到来之前收到了伤害。为了更好的让伤害和射线演算体合拍,要加创建持续性效果,并合理调整延时的长短。延时的长短是受位移器设定限制的,具体下边会进行分析。

4.位移器的最大移动速度要等于或稍小于搜索效果的前进速度,但是不可大于或明显小于这一速度。初始速度设定自由度比较大,只要不大于最大移动速度就好。而加速度值键要看自己的需求,如果不需要加速表现,可以直接将速度设为最大速度的值,加速度设为0。如果需要加速表现,则应当配合速度和最大速度使用,否则可能导致瞬间达到最大值或效果进行了大半了还没达到最大值,这时候视觉效果就不能和实际效果匹配了。这些要求的目的只有一个:让光束演算体不会追上搜索效果,也不会被搜索效果越落越远。因为位移器最大速度和搜索效果相等,而第二个搜索效果发生时,光束才开始追赶,他们之间有一个周期的差距,另外如果初始速度小于最大速度的话,这个差距还会进一步增大,直到达到最大速度,然后他们就会一直保持这一距离,直到最后一个搜索效果发生后,位移器才追上搜索效果(准确的说是最后一个搜索效果的发生位置)。也正是因为视觉效果会稍落后于实际效果,才需要在伤害效果前加延时,延时的长短应该近似等于搜索效果落下位移器的距离除以位移器的最大移动速度,如果你怕麻烦,也可以根据实测情况进行调整(我就是这么干的,因为即使计算出来,往往也需要根据实测效果进行些许微调)。建议计算出理论值后多调试几次,这样才能获得最佳效果。其实如果光束是加速的话,最完美的就是在效果中偏移的指定也不要使用等距点,这样才能完美匹配视觉效果。只不过多数光束都很快,很少有人注意到其中的小瑕疵罢了。

5.一定要记得在光束演算体和位移器使用cap 1条件,并允许位移器共享。尽管在预想情况下,是不可能重复创建这些演算体的,但是你不能保证自己的设置是毫无破绽的,为了避免某些情况下演算体重复创建,甚至错误创建,必要的冗余设置是非常重要的。



上边这些体会只适用于匀速前进的光束武器(或技能)。如果你就是要那种忽快忽慢的效果,那么需要对演算体部分进行特别的设置(比如让多个不同的光束演算体和位移器相继出现),这会变得更加复杂些,这里就不讨论了。

回复

使用道具 举报

发表于 2015-12-11 16:02:36 | 显示全部楼层
yxxiaobin 发表于 2015-12-11 13:26
除了语言表达能力欠佳,我的排版能力似乎也不怎么样,弄来弄去也不想回事,只好放弃了。

多写些教程就好了,支持LZ发教程

目前这个的问题是不会的看不懂,看得懂的都会了
发教程最好还是带有原始数据、名称之类的
直接说类型小白会蒙的

物编部分其实还是需要一定的基础
至少不同类型的演算体、效果、行为等都是做什么的要清楚
然后才能继续学习复杂的东西

大概看看就想自己做复杂的东西,是不行的(不是说LZ)
目前SE上主要是需要一些字典类的教程
比如各种类型的演算体是做什么的,几个主要的属性应该怎么填写
怎么用这种,比如LZ提到的位置(移动器)

用的时候可以去翻
我自己有个Galaxy的
不过那个缺少一些应用方面的解说
打算修改和增加内容的,一直没时间写,

点评

“目前SE上主要是需要一些字典类的教程”。这句话我非常赞同。可是这工作量啊,想想都有种想哭的感觉。能写这些东西的估计不会有太多时间去做,而迫切想去做的,估计自己能看的很明白都费劲(比如我这样的)。好在现  详情 回复 发表于 2015-12-11 18:03
回复

使用道具 举报

 楼主| 发表于 2015-12-11 18:03:01 | 显示全部楼层
疯人¢衰人 发表于 2015-12-11 16:02
多写些教程就好了,支持LZ发教程

目前这个的问题是不会的看不懂,看得懂的都会了

“目前SE上主要是需要一些字典类的教程”。这句话我非常赞同。可是这工作量啊,想想都有种想哭的感觉。能写这些东西的估计不会有太多时间去做,而迫切想去做的,估计自己能看的很明白都费劲(比如我这样的)。好在现在暴雪已经开始在编辑器注释上用些功夫了,以后可能会越来越好。

另外如果你能出一些辅助工具或字典类的东西,相信大家都会感谢你的付出的。
回复

使用道具 举报

发表于 2015-12-12 21:27:54 | 显示全部楼层
解析的不错,我曾经看到过头目的简单描述,只是大概知道是持续性搜索和伤害,然后演算体貌似是另外写的显示逻辑。看了你这个后基本知道是干嘛的了。不会的看不懂,知道的看得懂,但这解析真的给看得懂的人节省了非常多时间。
回复

使用道具 举报

发表于 2015-12-21 13:10:38 | 显示全部楼层
文字不行可以配上图
回复

使用道具 举报

发表于 2018-6-14 18:42:09 | 显示全部楼层
挺好的教程,谢谢!
回复

使用道具 举报

发表于 2019-5-13 14:33:06 | 显示全部楼层
本帖最后由 txjqyd 于 2019-5-13 14:34 编辑

看了一下巨象的设置,仍然没有明白,为什么光束会追不上搜索效果,光束产生的位置就在目标点0.0,并没有做偏移,而移动的目标点也是0.0,也就是说创建的时候就已经在位置上了,移动时应该也直接判定的瞬间到达,在下一个搜索效果还没发生前,搜索效果有0.25秒的间隔(好像是这个值),光束就已经到达并移除了才对,光束说为什么会追不上呢?
还是没搞懂,求大佬解惑

点评

因为创建第二个效果后才会使演算体移动,演算体直接创建在第一个效果位置,是不会移动的,  详情 回复 发表于 2019-5-13 20:35
回复

使用道具 举报

 楼主| 发表于 2019-5-13 20:35:31 | 显示全部楼层
txjqyd 发表于 2019-5-13 14:33
看了一下巨象的设置,仍然没有明白,为什么光束会追不上搜索效果,光束产生的位置就在目标点0.0,并没有做 ...

因为创建第二个效果后才会使演算体移动,演算体直接创建在第一个效果位置,是不会移动的,

点评

原来如此,谢谢xiaobin大佬~  详情 回复 发表于 2019-7-1 21:49
回复

使用道具 举报

发表于 2019-7-1 21:49:24 | 显示全部楼层
yxxiaobin 发表于 2019-5-13 20:35
因为创建第二个效果后才会使演算体移动,演算体直接创建在第一个效果位置,是不会移动的,

原来如此,谢谢xiaobin大佬~
回复

使用道具 举报

发表于 2020-12-2 21:00:16 | 显示全部楼层
大佬,我想增长太阳能射线枪的长度,更改了时段记数,对着数据顺序(增加偏移,每个+0.9)增加,可是射线模型始终是原效果到距离就不动了,但是摧毁地面的效果还会向前延伸,怎么解决呀

点评

没研究过,猜测是演算体移动器没修改导致的。  发表于 2020-12-4 18:33
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 10:06 , Processed in 0.479072 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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