如何将仅支持矩形的相切向量计算逻辑适配为支持任意形状?
通用形状/对象的顶点旋转变换实现算法
核心思路
现有矩形逻辑的本质是基于形状中心旋转顶点坐标,要扩展到任意形状,关键是获取该形状的原始顶点集合,再对每个顶点执行相同的旋转变换逻辑。
实现步骤
获取目标形状的原始顶点数据
- 针对不同类型的
Collider2D提取顶点:PolygonCollider2D:直接读取points属性得到所有本地空间顶点CircleCollider2D:按需求生成圆周采样点(如8个等分点)- 自定义形状:从对应组件或预设数据中读取顶点集合
- 若顶点是本地空间坐标,需转换为世界空间坐标(通过
Transform.TransformPoint()方法)
- 针对不同类型的
获取旋转中心与角度
- 旋转中心优先使用对象的
transform.position(变换中心),而非Bounds中心,避免缩放/偏移导致的误差 - 旋转角度从
transform.rotation提取,转换为弧度(与原有逻辑一致)
- 旋转中心优先使用对象的
对每个顶点执行旋转变换
- 计算顶点相对于旋转中心的偏移向量
- 使用标准2D旋转变换公式计算旋转后的偏移坐标:
rotatedX = direction.x * Cos(angle) - direction.y * Sin(angle) rotatedY = direction.x * Sin(angle) + direction.y * Cos(angle) - 将旋转后的偏移向量加回旋转中心,得到顶点的世界空间新位置
后续处理
- 对旋转后的顶点执行Debug输出、绘制射线等操作(与原有逻辑保持一致)
关键注意事项
- 圆形等无明确顶点的形状,需通过角度间隔采样生成顶点集合
- 确保所有顶点坐标处于同一空间(世界/本地),避免计算错误
- 复杂自定义形状需提前存储顶点数据,或从网格/碰撞体组件中提取
内容的提问来源于stack exchange,提问作者Epidermis
相关产品推荐
相关产品推荐

