下载 App
《刀光剑影》开发者日志
剑气随机滚转 + 拖尾居中
本期进展
1. 剑气不再永远是水平的
之前每道剑气都是固定的水平月牙,看久了很单调。这一期让它绕飞行轴随机滚转:
lua复制
luaself.roll = math.random() * 360.0 self.rotation = Quaternion(yaw, Vector3.UP) * Quaternion(self.roll, Vector3.FORWARD)
yaw 决定飞向哪里,roll 决定月牙绕自身飞行轴转多少度。滚 0° 是横劈,90° 是竖劈,其它角度就是各种斜斩。
实机连发 10 次,滚转角覆盖整圈:
260° 317° 57° 133° 127° 101° 307° 36° 356° 27°
[图片:暂不支持黏贴,请手动导入]
上图:同一帧里的多道剑气,能看到接近竖直和斜向的姿态。
2. 命中判定跟着改成三维
这是滚转带出来的必答题。旧判定把敌人压到 XZ 平面,跟月牙中心线比距离——剑气一旦竖起来,它在水平面的投影就缩成一条线,判定会整个失真。
改成把敌人换算到剑气的局部空间,再和真实中心曲线求三维最近距离:
lualocal local_ = self.rotation:Inverse() * (position - self.node.position)
滚到任意角度,判定都贴合实际刃面。
3. 拖尾改成以剑气为中心
滚转上线后暴露出一个一直存在、但水平时看不出来的问题:拖尾贴在剑气的一侧,不是居中。
根因在尾流的采样函数里——它在局部空间只朝 +Y 单侧抬起(0 ~ 1.55m)。剑气水平时这个"向上"看起来还像正常的向上翻卷;一旦滚转,同一个局部 Y 就变成了世界里的"向左"或"向右",拖尾就甩到侧面去了。
改法是把尾流根部从内刃 v=0.78 挪到刃面中心 v=0.5,局部 Y 从单侧抬升改成围绕中轴的双向摆动,层间偏移也改成相对居中:
lua复制
lualocal root = self:SampleSurface(u, 0.5) local y = math.sin(phase + 0.8) * 0.5 * Settings.Blade.energyHeight * math.sin(t * math.pi) * taper + (layer - 2) * 0.10 * t * taper
[图片:暂不支持黏贴,请手动导入]
上图:改之前的拖尾,明显贴在剑气右侧(这张是用户反馈时截的图)。
[图片:暂不支持黏贴,请手动导入]
上图:改之后的同一角度,拖尾从刃面中线向后翻卷。
问题与风险
① 滚转让"局部坐标"这件事第一次变得真正重要。
前五期的剑气永远是水平的,所以"局部 Y 轴"和"世界 Y 轴"恰好重合——很多地方顺手按世界坐标写也没出错。滚转一上线,所有在剑气局部空间里单侧偏移的写法都会变成"偏到侧面"。这期修了拖尾,但同类隐患值得再扫一遍:SampleWake 里的 spread 项、几处 ribbon 的 across 向量,都是按局部轴写的,滚转下语义虽然仍然自洽(跟着剑气一起转),但视觉上是否还好看,需要真机确认。
② 拖尾居中只是改了"根部",不是改了"形状"。
现在拖尾从刃面中线出发,但翻卷的形态仍是单侧摆动的正弦。滚到某些角度时,拖尾可能仍然偏向某一边——这个不是坐标问题,是形态设计问题,得看真机效果再调。
③ 整体渲染验收仍被两条初始化着色器错误标为 FAIL。
vNormal / vWorldPos 链接错误从很早就在,跟本期改动无关,但每次 -validate 的总结果都是 FAIL,所以不能说"验收通过"。脚本层断言(形状、命中、粒子回收)是过的,两码事。
下期计划
- 真机确认随机滚转的观感:是否所有角度都好看,有没有需要排除的"难看角度"
- 拖尾在滚转下的形态微调(是否需要让翻卷方向也跟着滚转自适应)
- 定位那两条初始化着色器链接错误(拖了太久)
- 敌人 AI 与战斗节奏调整(一直没做的最高优先级)




![《刀光剑影》开发者日志
第一期:让刀光"是画出来的",而不是贴上去的
本期进展
1. 核心玩法跑通了
玩家在屏幕上画一笔,这一笔的形状直接变成一道飞出去的刀光。画横线出横劈,画弧线出月牙,画爱心就出爱心刀光。笔画越长刀波越大,画得越快伤害越高。
技术上走的是「屏幕笔画 → 归一化形状 → 程序化几何体」这条路:把玩家的采样点降采样、居中、按最大跨度归一化到 [-0.5, 0.5],再沿着轨迹生成带截图](https://img2-tc.tapimg.com/moment/etag/FvfPjVihDzWqTvVHoCG78xT5dKzo_20261009184001.png/_tap_ugc_m.jpg)