fix(gameplay): 优化敌人碰撞体与新手教程瞄准

- 扩大并重叠 14 个 Enemy 的胸腹部碰撞体
- 消除自动锁定点位于碰撞体边缘的问题
- 移除教程中写死的相机瞄准角度
- 根据目标实时位置动态调整教程相机
- 自动选择与初始镜头夹角最小的存活敌人
- 同步瞄准状态,避免后续滑动发生角度跳变
This commit is contained in:
2026-07-21 19:05:38 +08:00
parent b283097c03
commit 9deac44a1e
20 changed files with 203 additions and 190 deletions
+27 -2
View File
@@ -1,5 +1,5 @@
// @structural-rewrite-v1
import { _decorator, AssetManager, Camera, Component, instantiate, Node } from 'cc';
import { _decorator, AssetManager, Camera, Component, instantiate, Node, Vec3 } from 'cc';
import { Ragdoll } from '../Ragdoll/Ragdoll';
import { EventCenter } from './EventCenter';
import { LevelState } from './EnumFile';
@@ -305,7 +305,32 @@ export class BattleLevel extends Component {
switch (0 as number) {
case 1: break;
case 2: break;
default: return (this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)[((this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["length"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) - 1];
default:
const enemies = (this["enemies"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["filter"]((enemy) => enemy && !(enemy["isDie"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
if (enemies.length === 0)
return null;
const cameraNode = FPSCameraController["getInstance"]()["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
if (!cameraNode)
return enemies[0];
const cameraPosition = cameraNode["getWorldPosition"]();
const cameraForward = cameraNode["forward"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown;
const direction = new Vec3();
let target = enemies[0];
let bestDot = -Infinity;
for (const enemy of enemies) {
if (!enemy["centerNode"])
continue;
void (Vec3["subtract"](direction, enemy["centerNode"]["getWorldPosition"](), cameraPosition));
if (Vec3["dot"](direction, direction) === 0)
continue;
void (direction["normalize"]());
const dot = Vec3["dot"](cameraForward, direction);
if (dot > bestDot) {
void (bestDot = dot);
void (target = enemy);
}
}
return target;
}
} while (false);
}