效果:
在 p0.pose 里的一些动画里都会有 EffectID 项。这个项指定了,当播放此动画的第一帧的时候会播放一个特效
特效也就是 sfx 目录下的后缀为.ef 的文件
首先,游戏里的特效是分类型的,全部类型有
BOX 立体模型
AUDIO 声音
PLANE 平面特效
DONUT 圆环特效
MODEL 物品特效,读取 des 文件作为模型,类似雪人套装和手机就这么弄得
SPHERE 球体特效
PARTICLE 粒子特效
CYLINDER 圆柱模型、
BILLBOARD 公告板特效
FLAG 一般用来挂载 受击打位置的特效显示,流血刀光一类
这些参考了网上查的资料
一般一个特效是.ef 文件,一个 ef 内部包含数个小的特效,有粒子,平面,立方体,圆球,圆柱(顶半径为 0 则圆锥都是 Cylinder),圆环,声音,广告牌之类
这些特效都有一个特点,就是他们是用参数指定给程序,让程序即时绘制的,这点很重要,之前准备对每个类型的资源做个标准大小,然后按照他设置的尺寸缩放,之后发觉无论如何,经过每一帧的缩放后,总是位置不对
在 unity 里习惯了指定预设完事,而要还原流星的特效就必须代码生成 Plane ,Sphere, Cylinder, Box 的网格,这个搞定之后
特效里有部分参数,设置了特效跟随着谁一起移动,又设置了跟随谁一起旋转,最后就是最麻烦的,因为一个特效都有很多帧,帧里会设置位置,那么这个位置,之前还原的时候,一直都是世界坐标
一般一个特效会存在 1-2 个骨骼,1 个用来跟随移动,1 个用来相对移动, 就是根据跟随物体的自身坐标系空间,来进行一个移动,这个移动是一个差值,也就是其中一个骨骼指定的物体的某个轴方向上移动动画帧设置的距离,所以之前坐标一直不对
而现在基本把流星的特效全部还原了。
CYLINDER 圆柱体特效,会根据设定的参数生成指定大小的圆柱模型,而不是直接拿美术模型来用
在使用匕首上上 A 时,特效在帧动画参数结束后,会有一些额外参数
0, 3, 30,40,90,450 理解为圆柱体,头一个 0 是程序读 ef 文件算长度的,后面的顶部半径(3) 底部半径(30),高度 40,另外 90,450 这两个参数不明白什么意思,但是改了也会引起特效变化
而匕首后 A 时,特效的三个参数变为
0,0,5 ,5,90,450 同样的意思,因为匕首后 A 体现刺的感觉,所以圆柱体特效尖端很细(在这里为 0 表示成为圆锥体)。这个顶部 0,底部 5,高度 5 的圆锥,经过特效的缩放参数,和动画帧中的四元数设置,让特效尖端保持与匕首尖端一致位置
所以可以看到很多圆柱体特效,但是特效样子都不一样,这就是因为这个网格模型是经过参数生成的,而不是固定的一个美术资源。
但是这些值里,单位应该是不一致的,顶部半径和底部半径,可能都是用实际米,高度,填 5 跟角色差不多高,而角色高度 36 左右,这点还需验证
现在代码里是以单位为米计算的。
特效的生命周期
特效一般会从 pose 里调用,动作播放的第一帧,就会播放特效,而特效的最后一帧的时刻就是删除时刻
特效与动作的配合
类似匕首 pose259 动作,播放特效时会产生一个攻击盒,这个盒子会随着动作一起移动,然后在 259 的攻击帧内开启攻击盒,如果动作播放的速率,与特效不匹配,那么可能攻击盒会在动作播放完毕前就被删除,所以要让动作完全按照制作时的 30 帧/S 来算插值
对接到 unity 的帧率上,比如如果 unity 是 60fps,那么原版动作像被加速运行一样,必须在 update 里重新计算动作缩放比
在 unity 里 QualitySetting 里 vsyncCount 的值决定了同步方式
Dont sync 表示不垂直同步,这种情况是尽高帧率跑。
Every V Blank 每 1 次垂直扫描归位一次同步 PC 上尽量以 60 帧/S 跑
Every Second V Blank 每 2 次垂直扫描归位一次同步 PC 表示尽量以 30 帧/S 跑
感觉跟时间有关系的东西,都麻烦的很,在 3 种同步方式下,我都不知道 Update 在 1 秒里被调用了多少次
以下是在 pc 上测试 unity 5.4.1f1 的 update 调用.
不垂直同步下,数值不稳定,认为没有什么意义 大部分数值比开了同步要大的多,一般在 90-105 左右 time.deltatime 不稳定数值浮动大
1 倍垂直同步 1 秒约调用 update 50 次 time.deltatime = 0.016-0.017
2 倍垂直同步 1 秒约调用 update 30 次 time.deltatime = 0.0333 特殊情况下 会存在 0 time.deltatime = 0.005
这样看来,用 update 里每一帧时间的增量来算动作插值应该是可以的,只要避免跳帧。
现在就来修改动画播放受垂直同步帧率影响的问题。
发觉好像是显卡问题,有时候像鬼畜一样,帧率嗖嗖的起来了,有时候又很正常,不清楚这个帧率受什么影响
一个好游戏,帧率稳定非常关键,而且帧率过高并不全是好处,到了人眼识别范围外,就没有必要了,费电不说,
像原版流星 fps 高了之后,跳不起来,这算是个 bug 吧.
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于