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);
}
+6 -2
View File
@@ -83,13 +83,17 @@ export class FPSCameraController extends SingletonBase<FPSCameraController> {
finally {
}
}
setTutorialRotate(): void {
setTutorialRotate(targetNode: Node): void {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default: void ((this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["setWorldRotation"]((this["aimState"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["tutorialRotation"]()));
default:
if (!this["cameraNode"] || !targetNode)
return;
void ((this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["lookAt"](targetNode["getWorldPosition"]()));
void ((this["aimState"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["initialize"](this["cameraNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
}
} while (false);
}
@@ -61,20 +61,4 @@ export class CameraAimState {
finally {
}
}
tutorialRotation(): Quat {
try {
do {
switch (0 as number) {
case 1: break;
case 2: break;
default:
void (this["vertical"] = -3.99);
void (this["horizontal"] = -32.27);
return Quat["fromEuler"](new Quat(), this["vertical"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, this["horizontal"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown, 0);
}
} while (false);
}
finally {
}
}
}
+1 -1
View File
@@ -311,7 +311,7 @@ export class PlayPanel extends PanelBase {
void ((this["targetNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["position"] = (FPSCameraController["getInstance"]()["camera"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["convertToUINode"]((target["centerNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["getWorldPosition"](), this["node"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
if (((this["targetNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["position"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["y"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown < 0 && Math["abs"](((this["targetNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["position"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown)["x"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown) < 30) {
void (this["EnterStep3"]());
void (FPSCameraController["getInstance"]()["setTutorialRotate"]());
void (FPSCameraController["getInstance"]()["setTutorialRotate"](target["centerNode"] satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown satisfies unknown));
}
}
} while (false);