Raycasting并不像我在Unity中预期的那样工作,它不是无限的,但为什么呢?

时间:2015-08-03 23:16:46

标签: c# unity3d raycasting

所以我做了一个小程序来测试Unity中的光线投射。 这是我的代码:(这是附在框中)

public class BoxScript : MonoBehaviour {

    void Update () {

        RaycastHit2D hit = Physics2D.Raycast (transform.position, -Vector3.up);
            if (hit.collider.tag == "Ground") {
                Debug.Log ("Érzékeltem a földet");
            }
        Debug.DrawRay (transform.position, -Vector2.up, Color.green);

    }
}

我以为我会看到无限的绿线指向下方。它往下看,但不是无限的。如果我转动boxCollider2D它是相同的。 我无法看到调试消息。如果它是无限的,我应该看到它,因为它击中了地面物体。我是对的吗?

你可以在这里看到结果: http://i.stack.imgur.com/KXiAi.jpg

为什么不是无限的?以及如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

Debug.DrawRay()方法不会绘制无限光线。它绘制一条长度等于给定幅度的线。在这种情况下,-Vector2.up等于 - (1,0)。你的实际光线投射应该是无限长的。

您可以通过修改它来“无限地”绘制它,如

Debug.DrawRay (transform.position, -Vector2.up * Mathf.Infinity, Color.green);

或者,将Mathf.Infinity替换为非常大的数字。

答案 1 :(得分:0)

只需使用此代码

detectGround = Physics2D.Linecast (sightStart.position, sightEnd.position, 1 << LayerMask.NameToLayer("Grounds"));
    Debug.DrawLine (sightStart.position, sightEnd.position, Color.green);

Debug.Drawline只在场景模式下显示而不是在游戏模式中如果你在Gizmo上它也将在游戏模式中显示 注意:您必须正确设置光线位置

答案 2 :(得分:0)

您需要将BoxCollider2D组件添加到地面对象并从框对象中移除碰撞对象并尝试使用代码。

    RaycastHit2D hit = Physics2D.Raycast (transform.position, -Vector2.up * 1000.0f);
    if(hit.collider != null)
    {
        Debug.Log ("tag" + hit.collider.tag.ToString());
        if (hit.collider.tag == "Ground") {
            Debug.Log ("Érzékeltem a földet");
        }
    }
    Debug.DrawRay (transform.position, -Vector2.up * 1000.0f , Color.green);

在这种情况下,当你将BoxcCllider2D添加到你的地面时也会看到是否有警告调整对撞机的大小,这样它就不会很小。