矢量数学统一避免障碍

时间:2016-03-22 06:06:17

标签: unity3d path-finding

我试图让我的角色在移动时避开障碍物。

目标是在点击上定义的,并且角色通过更新transform.position来移动到每个帧上(所以这里没有物理)。

每个障碍物都有对撞机和角色有触发器。在TriggerStay事件的角色我已设法获得有关联系点的一些信息:

Vector3 point = other.ClosestPointOnBounds(transform.position);
Vector3 dist = point - transform.position;

我遇到的最好的事情是:

Vector3 perp = Vector3.Cross(transform.forward, dist.normalized);
float dir = Vector3.Dot(perp, transform.up);

transform.position -= transform.right * dir;

但它不像我预期的那样有效。实际上它根本不起作用。 如何纠正角色位置,所以它在移动到目标时似乎是平稳地偏转了障碍物?

编辑:这是截图

screenshot

白色光线显示接触方向,因此它们是多个。 我想要的是角色在移动到目标时可以避开障碍物。

现在我想到了新的想法:

float correction = Vector3.Dot(transform.right, dist.normalized) / 10;
transform.position += transform.right * correction;

它有点像我想要的那样,但角色不断地从一个地方跳到另一个地方。不知道如何解决这个问题。

也尝试通过从运动矢量中减去接触矢量来校正运动方向,但是字符也会抖动并且愚蠢地旋转。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下内容:

Vector3 perp = Vector3.Cross(transform.forward, other.transform.up);
transform.position -= perp.normalized * other.bounds.size.x / 2f;

你似乎没有正确使用Vector3.Cross。请在此处阅读:Unity3D docs link