You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中3D方向等距判定的实现方案咨询

Unity中3D方向等距判定的实现方案咨询

我现在用Unity(C#)做一个方向对比系统,先给个简化的方向列表示例:

{Up, {0,1,0}}, {UpRight, {1,1,0}}, {UpRightForward, {1,1,1}}, {Right, {1,0,0}}, {Down, {0,-1,0}}

我的需求是让某些方向间的“距离”相等:比如从Up到UpRight,和Up到UpRightForward的步长应该一致。但用常规的角度计算的话,前者是45度,后者约54.7度,UpRight到UpRightForward又只有约35.3度——我知道这是正常的数学结果,但业务上我需要这些相邻方向的步长完全相等。

最开始我做了一个基于轴步进的系统,用下面的代码让每个“相邻”方向的步长为1:

float GetAxisDistance(Vector3 direction, Vector3 targetDirection)
{
    direction = AxisNormalise(direction);
    targetDirection = AxisNormalise(targetDirection);
    return Mathf.Abs(direction.x - targetDirection.x) 
        + Mathf.Abs(direction.y - targetDirection.y) 
        + Mathf.Abs(direction.z - targetDirection.z);
}
Vector3 AxisNormalise(Vector3 direction)
{
    if (direction == Vector3.zero)
        return Vector3.zero;                
    return direction / Mathf.Max(Mathf.Abs(direction.x), Mathf.Abs(direction.y), Mathf.Abs(direction.z));
}

这个方案大部分情况能用,但还有两个我不满意的问题:

  • Up到UpRightForward的距离算出来是2步,但我需要它是1步
  • Up到Down的距离算出来是2步,但我需要它是4步

我现在在研究用相邻方向寻路的思路重构系统——比如从Up到Down需要走相邻方向的最短路径,最终得到4步的结果,但具体的数学逻辑还没完全理清楚。

有没有大佬能给点建议或者帮助?我完全可以调整方向的定义方式(毕竟我也知道{0,1,0}的长度和{1,1,0}不一样)。

备注:内容来源于stack exchange,提问作者Lord Flumph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:08:13