fix(gameplay): 优化敌人碰撞体与新手教程瞄准
- 扩大并重叠 14 个 Enemy 的胸腹部碰撞体 - 消除自动锁定点位于碰撞体边缘的问题 - 移除教程中写死的相机瞄准角度 - 根据目标实时位置动态调整教程相机 - 自动选择与初始镜头夹角最小的存活敌人 - 同步瞄准状态,避免后续滑动发生角度跳变
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user