Skip to content

技术债务记录

本文档记录项目中已知的技术问题和临时解决方案,供后续版本参考。

V0.2 已知问题与临时方案

1. 旋转角度计算的临时逻辑

位置: assets/scripts/Player/PlayerControl.ts:613-617

问题描述:

核心逻辑在于频繁切换旋转中心导致旋转前后获取的角度方向不同(因为旋转中心可能不同),从而导致实际角度计算出错。为了解决这个旋转中心不同导致的角度含义不同,使用了固定的方向计算(始终使用玩家→锚点的向量),所以为了应对旋转中心切换的情况,还需要在被切换的情况下手动修复角度。

临时解决方案:

typescript
// 始终使用玩家→锚点的向量计算角度,然后在特定情况下手动反向
const edge = this.State.nowAnchor!.worldPosition;
const center = this.node.worldPosition;
const diff = { x: edge.x - center.x, y: edge.y - center.y };
return zRotFromVec(diff);

影响: 需要在使用时判断是否旋转中心为玩家,非玩家的情况下需要反向,增加维护成本


2. 旋转中心在锚点时的角度反向

位置: assets/scripts/Player/PlayerControl.ts:666-671

问题描述:

这是问题1的实际体现。问题1在修复旋转中心切换导致的角度计算错误,但这个修复导致了新的问题:角度含义被固定了,与实际所需要的含义出现偏差,需要修正一下,以符合实际。当旋转中心是锚点时,起始角度需要+180°才能正确生成扇形区域。

临时解决方案:

typescript
if (this.State.nowAnchor?.uuid === this.State.rotateCenter.parent!.uuid) {
    startAngle = 180 + this.startAngle;
}

3. 锚点销毁导致旋转失效

问题描述:

现在旋转中心假如挂载在锚点上,锚点假如不通过事件系统触发通用的销毁逻辑,直接销毁可能会导致旋转中心一同消失,从而旋转功能失效。也就是依赖于销毁锚点必须调用事件。

影响: 如果销毁锚点时未调用事件,会导致旋转功能失效


4. 创建玩家后旋转中心不可见

问题描述:

目前只是不可见,但最核心的问题是为什么不可见的情况下后续居然能正常使用,因为这意味着旋转中心应该是异常状态,但他偏偏不影响,属于是不该能动的东西动了。后续还是需要详细排查。但毕竟目前只是显示问题,所以不急。


5. 旋转组件及控制逻辑代码质量

位置: assets/scripts/Player/PlayerControl.tsassets/scripts/Player/PlayerRotate.ts 整体

问题描述:

旋转组件及其控制逻辑,目前已经臭不可闻,必须重构。但又因为旋转相关的机制其实已经全部实现了,可预期的未来也不会有新东西,重构貌似是没必要的。现在也只是有一个想重构为状态机的预想。

临时解决方案: 无

影响: 代码可读性和可维护性较差

建议重构方向:

  • 重构为状态机模式,提升代码可读性和可维护性
  • 或保持现状,因为功能已完整且稳定