gpt4 book ai didi

unity3d - Physics2D.Raycast 随机返回 null

转载 作者:行者123 更新时间:2023-12-02 02:47:45 24 4
gpt4 key购买 nike

我有一个带有单元格的电路板,有些是正常的,有些是墙壁。我想在两点之间设置一条线,并知道它是否与壁细胞发生碰撞。

这是我的代码:

private void OnDrawGizmosSelected()
{
RaycastHit2D raycast = Physics2D.Raycast(from, to, Vector2.Distance(from, to), layerMask);
if (raycast.collider == null) { Gizmos.color = Color.green; Gizmos.DrawLine(from, to); }
else { Gizmos.color = Color.red; Gizmos.DrawLine(from, to); }
}

80% 的时间都有效。在 map 中的某些点,它根本不起作用。

正常情况下的例子

Example when it's OK

在这种情况下没问题,但如果我将右下角向下移动大约 0.2,它就不再起作用了。

不正常的例子

Example when it's not OK

我的线越过绿色,就像根本没有墙一样。

我已经在壁单元上设置了 BoxCollider2D 和我的层。

最佳答案

Physics2D.Raycast() 中的第二个参数是“方向”,而不是射线的末端(与 Gizmos.DrawLine() 不同,您 正确调用它是因为它确实使用开始和结束作为参数)。你想要这样的东西:

Vector2 direction = to - from;
Physics2D.Raycast(from, direction.normalized, direction.magnitude, layerMask);

您在后续的 if 语句中也有一些重复的代码可以清除:

Gizmos.Color = (raycast.collider == null) ? Color.green : Color.red;
Gizmos.DrawLine(from, to);

关于unity3d - Physics2D.Raycast 随机返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53642018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com