feat(skill): 重做普攻弹道逻辑,优化攻击命中表现

1. 新增atk_ci普攻预制体,替换原有的atk_light预制体配置
2. 调整普攻预制体的位置、缩放属性,更新技能配置的sp名
3. 重构施法目标坐标计算,修正Y轴高度偏移以命中目标中心
4. 优化线性弹道移动逻辑,统一处理弹道延长和旋转计算
5. 更新攻击动画的帧时长和精灵贴图资源
This commit is contained in:
panw
2026-05-18 10:53:21 +08:00
parent 79cf3c1a62
commit b01a3d2b84
7 changed files with 438 additions and 52 deletions

View File

@@ -64,31 +64,46 @@ export class SMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate
switch(moveComp.runType) {
case RType.linear:
// linear类型根据atk_x和atk_y调整位置
// linear类型根据atk_x和atk_y调整起始位置
const adjustedStartPos = v3(
moveComp.startPos.x + moveComp.atk_x,
moveComp.startPos.x + moveComp.atk_x * moveComp.scale,
moveComp.startPos.y + moveComp.atk_y,
moveComp.startPos.z
);
const adjustedTargetPos = v3(
moveComp.targetPos.x + moveComp.atk_x,
moveComp.targetPos.y + moveComp.atk_y,
const originTargetPos = v3(
moveComp.targetPos.x,
moveComp.targetPos.y,
moveComp.targetPos.z
);
// 如果开启水平移动开关强制目标Y等于起点Y
if (moveComp.isHorizontal) {
adjustedTargetPos.y = adjustedStartPos.y;
const direction = new Vec3();
Vec3.subtract(direction, originTargetPos, adjustedStartPos);
// 延长终止点统一消亡点的x坐标为 +-500
const targetX = moveComp.scale > 0 ? 500 : -500;
let targetY = originTargetPos.y;
if (Math.abs(direction.x) > 0.01) {
const slope = direction.y / direction.x;
targetY = adjustedStartPos.y + slope * (targetX - adjustedStartPos.x);
}
const adjustedTargetPos = v3(
targetX,
targetY,
originTargetPos.z
);
moveComp.startPos.set(adjustedStartPos);
moveComp.targetPos.set(adjustedTargetPos);
node.setPosition(adjustedStartPos);
// 设置旋转角度
const direction = new Vec3();
Vec3.subtract(direction, moveComp.targetPos, moveComp.startPos);
if (direction.length() > 0.01) {
const angle = Math.atan2(direction.y, direction.x) * (180 / Math.PI);
const dirForAngle = new Vec3();
Vec3.subtract(dirForAngle, adjustedTargetPos, adjustedStartPos);
if (dirForAngle.length() > 0.01) {
const angle = Math.atan2(dirForAngle.y, dirForAngle.x) * (180 / Math.PI);
node.angle = angle;
}
break;