hello!大家好,我叫JJQ,我又来发日志了,这期我们来讲讲弹幕系统。
首先普及一些基础设定(不同程序这个设定可能都不一样,但是需要有个标准)
角度方向标准:向上定为0°
坐标轴:和U3D一致
然后根据弹幕的需求总结出以下参数
Animation:子弹轨迹动画
BulletNum:子弹数量
FaceTarget:枪口是否瞄准目标
OneAngle:枪口角度偏移,勾选了FaceTarget则无效(英文意思对不上是因为一开始需求不明确名字没起好,配置了一些后再改的话,已配置了的数据会丢掉,所以还保留着)
OneDelay:每个子弹的间隔发射延时(非0则是逐个发射)
OnePosOff:每个子弹的间隔发射偏移
TotalAngle:散射角
TotalDelay:发射总延时
TotalPosOff:每个子弹的发射点偏移
BulletSpeed:子弹动画速度百分比缩放值
Clockwise:子弹间隔发射时的顺时针/逆时针方向
最后讲讲一个最关键的,就是每发子弹的子弹轨迹,我一开始想到的方式是公式传入,但是这种方式配置麻烦,而且从轨迹逆推公式的过程也挺麻烦,切不直观。所以后来我采用了另外一种方式,就是动画数据模拟。
动画数据模拟方式是这样的,直接做个Animation动画,动画控制特定节点(坐标节点,子弹高度节点,子弹大小节点等),如下图中
节点属性 | 对应子弹参数 |
SingleBullet.position | 坐标 |
bullet.position | 子弹高度 |
然后实际运行时,播放动画,然后每帧读取定义节点上的数据赋值到子弹相对应的属性中
这样做的好处是子弹的轨迹清晰可见,下图中绿色的是y轴变化值,子弹的y轴方向和枪口方向零角度偏移下的方向是一致的,所以y轴也就是枪口的指向方向。下图轨迹,可明显看出子弹做出了一来一回的移动。
单个动画是这样的
再加入具体的弹幕参数配置
好了 完工!
由于具体代码太多太复杂了,而且每个程序写代码风格不一样,这里就不贴代码了,原理了解了就成,目前功能还都比较基础,一些复杂点的功能(比如打出一组设定好阵型的子弹组)还未支持,后续有升级再更新一版
最后给大家展示一个比较复杂的弹幕演示
暂无关于此日志的评论。