Unity-raycast明显在碰撞,但是不起作用?

时间:2019-03-09 01:28:51

标签: c# unity3d game-engine game-physics

好吧,我在Default层上有2个对象,当raycast发生碰撞时,需要使用它们触发跳转。我可以看到raycast与平台相交:

enter image description here

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

enter image description here

但没有打印任何内容:

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);
            }
        }

这是怎么了?

1 个答案:

答案 0 :(得分:2)

尝试使用您的值改编自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使用此代码。

如果仍然不起作用,请尝试检查矩阵冲突。

别忘了,您还可以在光线投射中使用图层蒙版。 :)