我试图让我的角色在移动时避开障碍物。
目标是在点击上定义的,并且角色通过更新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;
但它不像我预期的那样有效。实际上它根本不起作用。 如何纠正角色位置,所以它在移动到目标时似乎是平稳地偏转了障碍物?
编辑:这是截图
白色光线显示接触方向,因此它们是多个。 我想要的是角色在移动到目标时可以避开障碍物。
现在我想到了新的想法:
float correction = Vector3.Dot(transform.right, dist.normalized) / 10;
transform.position += transform.right * correction;
它有点像我想要的那样,但角色不断地从一个地方跳到另一个地方。不知道如何解决这个问题。
也尝试通过从运动矢量中减去接触矢量来校正运动方向,但是字符也会抖动并且愚蠢地旋转。
答案 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