dqndqn1 发表于 2016-9-5 00:46:06

[原版模型修改]使用了LookAt行为对炮塔添加了新的效果(StarShipAdun_Turret)

本帖最后由 dqndqn1 于 2016-9-5 12:13 编辑


前几天有人发帖说想要用这个模型做地图,我简单的看了一下,原版的模型只有一个动画序列stand,而且还是在不停的扭头打炮,想使用在地图里当做单位真是难上加难,不把模型拆开再重做一遍是不行的了
但是初次尝试用m3plugin导出失败了,隔了几天突然发现好久不用的blender也有导入导出m3的插件,意外的是成功导出了。好了废话不多说了,主要说说我都做了些什么吧~
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
贴图动画基本参照原模型还原了,还添加了自定义的GLStand动画,其中一点不足是没有光晕,好像是StarArtTool版本太老了,没有光晕这种材质,所以原本的光晕只好放弃了,主要将原本的动画分解成不转头的Attack,快速Attack Fast,Attack Ready,Attack load(这个是charge动画,随便选了个关键字……),Attack End,还有对应Attack Fast的Attack Fast A,Attack End A,在地图里全匹配关键字就可以精确选择了。详细说明一下:
Attack:原版的Attack动画,原汁原味,不添加任何杂质。(100帧,3.333s,武器伤害点1.76左右)
Attack Fast:将原版的动画时间缩短一半,charge动画基本删除,适合单位快速攻击时使用。(60帧,2s,武器伤害点0.5左右)
Attack Ready:初始的展开动画单独提取,跟End配套可以设置元祖动画。(45帧,1.5s,non-looping)
Attack Load:充能阶段循环播放,配合GLStand基本无瑕疵。随时可打断播放其他动画。(175帧)
Attack End:Attack Ready对应的关闭动画。建议不要省略,因为伤害点被放在了这个动画里,而且过早关闭会影响GLStand的效果。(47帧,1.567s,武器伤害点0)
Attack Fast A:配合Attack Load在充能阶段,还可以插入多次攻击而不退出充能阶段,随时可插入,不影响效果。(33帧,1.1s,武器伤害点0)
Attack End A:是不带伤害动画的关闭动画,配合Fast A所在的Load阶段使用,同样建议不要省略。(30帧,1s)
GLStand:姑且写一下,一个循环120帧,贯穿了所有动画序列,Stand使用的是炮塔浮动效果和队伍颜色闪烁,所有Attack使用的是充能能量流效果。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

然后作为演示的地图,我定义了4种攻击方式:1,默认进地图的武器是Attack Fast动画。2,大和炮的技能是原版Attack动画。3,最右下角的技能开启后切换成持续充能态,武器替换后攻击使用的是Attack Fast A,关闭是End A。4,剩下中间的开关是启动鼠标射击关联,点住左键不放进入蓄力充能,松开射击,结束播放Attack End动画。(这里偷了个懒,第4技能基本用触发做了,原本应该去调用炮塔指向鼠标,但现在一旦播放完毕就会飞快找到原炮塔位置……其他的技能用数据里修改单位效果调用炮塔没有这样的问题)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一些其他的东西:附着点没有加太多,Origin,Center,OverHead,Turret,Turret Z,Turret Y,Weapon,还有两个附着点HeadMount和Umoja,名字都是随便选的,这两个不建议绑定模型,会很鬼畜我跟你讲……
包围球这个其实没弄好,想做个椭球的护盾随着炮塔一起旋转,但好像并没有起作用?所以变成了一个大扁球。Target球倒是很好的绑定上了……
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
然后是最关键的步骤了,整个模型的炮塔能不能正确指向目标全靠下面这些东西了!(我还不知道怎么使一个炮塔横纵同时操作……)
这个模型里使用了LookAt模型行为,主要是为了解决炮塔纵摇的问题,先说一个东西大家应该都了解,那就是一个人骑着驴,手里拿着杆吊着饵,驴一直想吃往前走却吃不到。为什么要说这个呢,因为这个LookAt行为也是这样的原理,自己看向自己的节点,却总也对不齐,这时候这个节点就像上了发条一样自己动起来了!具体的步骤我慢慢说。


先做准备工作。在“游戏UI数据”选项卡里注册三个注视类型(一会我们会在演算体里使用到他们),解释一下,率,是按角度/秒的方式旋转注视目标,可以模拟出炮塔的效果(但是仅限于演算体层,不能和游戏数据互动)。




权重,是分配组在一个注视类型里的可以注视的多准确的程度(或者说是阻尼吧,原谅我没有太好的表达方式),并不是多个组在一个注视类型里的分配权重,这个要切记。
时间,是按照固定时长注视到目标,这个如果设置0而率不为0的情况下,按率的设定走,否则一切时间设定优先,-1的时候代表立即注视,没有缓冲时间。单位是毫秒。
组,是模型里定的LookAt组,我们要用的第一组就是"Turret"组(这个字符串在模型里指定好的,除非打开重新修改,否则必须这个大小写一字不差的注册上)。
我们不需要多个组去注视同一个目标,所以每个类型只用各新建一个开始停止组就ok,"Turret"组,"Target"组,"Head"组。注视类型的ID随便起,这个主要是用来识别和调用的,方便就好。其他参数权重为1(这个我在模型里也有一个权重设置,所以地图里就为1),时间我一般都先设置600毫秒,以后再修改成率或其他时间。

-----------------------------------------------------------------------------------------

首先创建一个炮塔演算体附着到Turret附着点,你的武器炮塔必须绑定Turret附着点,其他的Turret Z,Turret Y都不行(如果不要纵摇的话也可以绑定……),这个Turret附着点操作着一个虚拟的炮塔,这个在游戏里看不见的,打开模型文件可以看见其实Turret附着点操作着HeadMount附着点做平面旋转。

然后在触发器里添加一条LookAt动作(我还不会在演算体里指定注视一个自己的附着点),使用刚才创建的Turret注视类型去注视自己的HeadMount附着点,因为设置了炮塔,这时候HeadMount就像相当于一个表示炮塔朝向的附着点,最后的效果就是整个炮塔正常的横摇起来了,可以进游戏观察一下。
到这里都很好理解,最关键的是下面,理解了自己就会做这种效果了,同样在触发器里添加一条LookAt动作,使用Head注视类型去注视自己的Umoja附着点,这个就是前面提到的驴吃饲料,给模型一个动力。这里要详细说明一下Head组的节点成员(节点:模型里的东西都可以设置为节点,Mesh实体,辅助对象,粒子发生器,附着点,骨骼,都可以,除了一些特殊的如护盾外壳Mesh),打开模型文件找到行为编辑器,其中Head组我只给了一个节点Turret Y,这个节点实际上就是我们纵摇的节点(将它限制在一个合理范围内是很重要的)。这里可以将Turret Y想像成是驴,Umoja是饲料。从这个节点有一个分支,这个分支如图所示,最后的终点就是Umoja节点。
这个分支就是前面提到的骑驴用的棍子。当然这样还是不能控制我们的“驴”向我们想让他去的地方移动。这个分支前面还有一个小分支,这个分支的作用就是拴住饵的绳子。这个分支的转向就是由前面一开始注册的Target组控制的。这个Target组在游戏中应该每当需要注视一个单位目标时将所对应的注视类型打开,所以在游戏里新建一个注视演算体,具体的使用方法参考我的地图。它的效果就是将饵进行偏移,好让"驴"去追着他跑。
好了这样道具就都齐了,一切设置完毕就测试一下吧!看,炮塔正在指向正确的位置。^_^
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------





好了说了这么多,你一定想问,为嘛不直接一个Turret Z横摇,Turret Y纵摇完事?,答案是不能这样做……(游戏数据里炮塔同时横纵摇我不会,所以想到纵摇用LookAt模拟),刚开始我也是这样做的,结果是LookAt的父节点被炮塔演算体劫持了后,并不能把正确的转向数据传入到有LookAt行为的节点中。也就是说不管炮塔转到何处,我的纵摇节点只能面向原方向。
那么加大纵摇的范围可以吗?这也是不可取的,(纵摇千万不要设置超过+-90度的范围,否则模型不会向你所期望的方向转动……)LookAt行为我认为原本应该是为人物模型服务的,所以你根本没见过头可以向后折过去的人吧……
那然后再设定一个横摇LookAt节点在整个节点树上不就好了吗?结果同样令人沮丧,索然炮塔演算体跟LookAt节点互不干涉,但是他们头上顶的模型主体都会接受两方的数据!也就是说原本指向10度的东西,实际上模型指向了20度!,更别提角度再大点了,结果惨不忍睹……(所有的排列我都试过了,演算体在树的父级,中间级,子级都不行……)

所以最后折中的方案就是这种间接嫁接法,将炮塔演算体的转向转换成可以衡量的向量,然后具体的炮塔转向实现是完全用有LookAt行为的节点完成的。这样就可以在兼容游戏炮塔的基础上,还可以纵摇精确指向目标了!

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

还有一些注意事项:
1.要使用纵摇功能一定要提前发布上面两条LookAt动作!并且对应的附着点不能错,错了就没效果了。切记切记!
2.这个"驴追饵"的系统可以嵌套或者加长,最长我试过超过300游戏距离,就是超出地图好远了,整体效果还是不错的。
3.这个系统是本地运行的,模型看起来千人千样,不用担心同步问题,因为根本不会去同步,请放心使用,只要电脑带的动就行。
4.这个模型里的驱动驱动力是指向目标的向量和炮塔演算体的向量,实际上可以替换成其他的东西,只要可以操控就完全没问题,跟广告版模型行为配套驱动可以实现本地模型的端枪瞄准动画,非常的平滑,不会出现游戏周期0.625秒带来的各种问题(不过是本地的,其他玩家看的话还是需要另外指定一个模型,不过其他人怎么知道你到底具体看的是哪,也不会去关心……只要大体对就好)。
5.这个反馈系统的各个节点的距离长度是有规定的,超过一定比例要么不起作用,要么就震荡的没完没了。这是个数学问题,请自己动脑想想吧,我就不说了。
6.LookAt行为节点设置的小技巧:尽量将横摇和纵摇分开,不要想用一个节点解决问题,一般人物模型的LookAt行为才会用一个节点同时设置横纵摇。
7.LookAt行为节点设置的小技巧:消抖,因为是自反馈系统,一定会存在震荡问题(模型会跳,闪烁),发现震荡比较严重的时候可以将多个相同方向的节点加入一个组,同时设置一种方向要么横摇要么纵摇(纵摇还是上限总和不要超过+-90度)。我这里面用了两组横摇消抖,每个里面两个横摇一个360度,一个180度。
8.LookAt行为节点设置的小技巧:LookAt组里设置超过一个节点的时候,当每次重新打开编辑,设置过上限的节点有时会自动重置到+-0.01这应该是个Bug。劲量避免吧(我每次都小心翼翼)。
9.LookAt行为节点设置的小技巧:一些节点自带缩放,这会导致LookAt行为预览的时候出现严重的过大现象,不要着急,一种办法是慢慢来,多开关几次行为编辑器,有时会好,怎么都不会好的时候调完一个就不要回去看了一个一个按顺序设置完后,立马关闭。一旦再打开又白设置了……(特别小心翼翼)。还一种就是把他的缩放重置,但是在骨骼里,特别是那些有动画的,一旦重置就会影响其他相关联的骨骼,对于这种我也没什么好办法。


还有这个我还没做死亡模型,谁有兴趣做做看?我这几天应该不会去做了。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

测试地图:模型:贴图:




yxxiaobin 发表于 2016-9-6 12:18:38

感谢大神分享。

yxxiaobin 发表于 2016-9-6 12:25:25

另外炮塔转头依赖的是附着点的旋转,但抬头和低头确实由额外动画提供的,可以参考一下不朽者这种模型。

dqndqn1 发表于 2016-9-8 00:42:41

yxxiaobin 发表于 2016-9-6 12:25
另外炮塔转头依赖的是附着点的旋转,但抬头和低头确实由额外动画提供的,可以参考一下不朽者这种模型。

不要说我是大神啊,全是野路子自己摸索的,还有好多都不会啊,最多也就在lookat行为这地方做了比较多的研究

wyg5105478 发表于 2016-9-8 18:26:15

dqndqn1 发表于 2016-9-8 00:42
不要说我是大神啊,全是野路子自己摸索的,还有好多都不会啊,最多也就在lookat行为这地方做了比较多的研 ...

高手啥时候有空把那个人族的巨型导弹塔也改改?那个貌似很吊的样子
页: [1]
查看完整版本: [原版模型修改]使用了LookAt行为对炮塔添加了新的效果(StarShipAdun_Turret)