Unity - 光线投射明显发生碰撞但不起作用?

Unity - raycast is clearly colliding but does not work?

好的,我在默认层上有 2 个对象,当光线投射发生碰撞时,我需要用它们触发跳跃。我可以看到光线投射与平台相交:

这是我在平台上的对撞机:

但没有打印任何内容:

Vector3 rotation = transform.forward;

        RaycastHit hit;
        Debug.DrawRay(new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z), rotation, Color.green);
        if (Physics.Raycast(new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z), rotation, out hit, rayDistance))
        {
            print(hit.transform);
            if (hit.transform.GetComponent<Platform>() != null)
            {
                Jump(hit.transform);
            }
        }

这里有什么问题?

尝试使用您的值改编自 https://docs.unity3d.com/ScriptReference/Physics.Raycast.html 的代码:

RaycastHit hit;
Vector3 startPoint = new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z);
if (Physics.Raycast(startPoint, rotation, out hit, Mathf.Infinity))
{
    Debug.DrawRay(startPoint, rotation * hit.distance, Color.yellow);
    Debug.Log("Did Hit");
}
else
{
    Debug.DrawRay(startPoint, rotation * 1000, Color.white);
    Debug.Log("Did not Hit");
}

这是我做的测试的GIF

这只是一个测试,看看问题是否出在光线距离之间。

您也可以使用 Debug.DrawLine 代替,然后使用 RayCast 中使用的相同距离设置终点。

Vector3 startPoint = new Vector3(transform.position.x, transform.position.y + 0.4f, transform.position.z);
if (Physics.Raycast(startPoint, rotation, out hit, rayDistance))
{
    Debug.DrawLine(startPoint, startPoint + rotation * rayDistance, Color.green);
}
else Debug.DrawLine(startPoint, startPoint + rotation * rayDistance, Color.red);

另一个 GIF 使用此代码。

如果还是不行,试试检查矩阵碰撞。

不要忘记您也可以在光线投射中使用图层蒙版。 :)