下载 App
【开发者日志#3】星序 - 轨迹采样与发光体预警机制
10/034 浏览综合
导言:
上期把小球跑通了,确定了移动和冲刺的基础手感(虽然冲刺方向还没定死)。
这次,游戏最核心的机制终于要开始动工了:如何记录玩家的轨迹,生成使用简单的音效,并让星光在正确的时间、正确的位置闪烁。这一篇主要分享我在实现“轨迹采样”和“发光体预警”时踩过的坑。
本期进展:
确定了冲刺方向:综合了上期的风险,我最终决定还是采用“朝当前移动方向冲刺”。如果玩家没有按移动键,按空格则朝面朝方向(基于上一次移动方向)冲刺。这么定是为了后续让光线方向更有规律,减少不可控的随机感。
实现了轨迹采样器:为了解决上期提到的物理帧不同步问题,我放弃在 Update 里按时间记录,而是改成了按移动距离采样。具体来说,玩家小球每移动 0.5 个单位的距离,就在当前位置记录一个轨迹点。这样无论帧率怎么波动,发光体的间距都是均匀的。
星光占位与预警逻辑:在轨迹点生成了星光占位(先用简单的2D彩色圆形sprite代替)。它初始是透明的,然后闪烁 3 次,每次闪烁伴随一个简单的测试音效。
音效生成:暂时先使用Audacity采用正弦波880HZ振幅0.6与正弦波2640HZ振幅0.4的两个轨道淡出效果混合音效作为基准音效,其他音效以此扩展。

记录与射线测试:在发光体第一次闪烁时,记录下玩家小球当时的位置。闪烁结束后,用 LineRenderer 画一条测试光线,从发光体位置射向记录的位置,停留 1 秒后消失。
对象池初尝试:为了避免频繁 Instantiate 和 Destroy 造成卡顿,我开始引入简单的对象池。光线消失后,连同发光体一起被 SetActive(false),并放进队列等待后续处理。
问题与风险:
闪烁时机的判定非常折磨:让发光体“闪烁 3 次”听起来简单,但为了配合音效和光线射出,实际逻辑写起来有点绕。特别是如果玩家在闪烁期间跑得很快,光线射向的到底应该是“第一次闪烁那一瞬间的位置”,还是“闪烁开始时的位置”?目前我取的是瞬间位置,但还需要测试手感。
对象池的状态重置:因为发光体身上挂着闪烁动画、LineRenderer 和音效,放回池子再取出来时,必须严格重置所有状态,否则会出现上一次的光线还没消失,新的就射出来了,或者音效重复播放的 Bug。
视觉噪音隐患:随着小球移动,屏幕上出现的发光体越来越多。虽然现在只有2Dsprite,但未来加上真实美术后,如果同时有 10 个发光体在闪烁,屏幕会非常乱。可能后续需要限制同屏发光体的最大数量,或者让它们在半透明和实体之间更柔和地过渡。
风险:如果轨迹采样逻辑有 bug(比如漏记录或记录位置偏差),后续光线回放时会出现“我明明没经过那里,为什么光线射向那里”的强烈不公感,必须在这一步把位置记录精准。
下期计划:
实现完整的队列回放机制:累计到一定数量的光线后,按顺序从队列中取出并依次启用,同时播放对应的音效。
加入碰撞检测:小球碰到光线后的反馈(是扣血、重置位置还是直接死亡?下期我会定下来)。
加入简单的测试音阶:给每个发光体分配不同的音高,让回放时形成一段有规律的旋律,看看听感如何。
继续优化移动参数,确保躲避弹幕时的手感顺滑。












